강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

고은성님의 프로필 이미지
고은성

작성한 질문수

OLS 모델 계수 역변환 방법

작성

·

120

0

OLS를 이용해서 모델을 만들기 전에 인자들에 대해서 robustscaler를 이용해서 표준화를 했습니다.

만들어진 모델에 실제값을 적용하기 위해서 모델의 계수들에 대해서 다시 역변환을 시키는 코드를 짜고 있는데

방법을 잘 모르겠습니다.

 

1 . robustscaler로 표준화한 코드

robustscaler = RobustScaler() df_scale = robustscaler.fit_transform(df_corr) df_scale

2. 학습시킨 코드

X = sm.add_constant(X)

model = sm.OLS(y, X)

model_trained = model.fit()

3. 실습 내용

모델 계수 출력을 위해 아래 코드 실행 했으나

코드 실행 : print("표준화된 모델의 계수:", model.coef_)

오류 발생 : AttributeError: 'OLS' object has no attribute 'coef_'

코드 수정 : print("표준화된 모델의 계수:", model_trained.params)

출력값 : 표준화된 모델의 계수: const 0.202

생산량 -0.106

투입량 0.265

초기농도 0.726

dtype: float64

이 다음에 이러한 계수들을 역변환하려고 하는데 잘 안 되네요.

고수님들 조언 부탁 드려요~

 

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

고은성님, robustscaler로 표준화 시킨 계수들을 원래의 스케일로 역변환하는 과정에 대해 도움이 필요하신 것 같습니다. RobustScaler는 데이터의 중앙값(median)을 0, IQR (Interquartile range, 사분위수 범위)을 1로 사용하여 데이터를 스케일링하는 방법입니다.

역변환 과정에서는 RobustScaler에 저장된 center_ 값(중앙값)과 scale_ 값(IQR에 해당)을 사용해야 합니다. 계수(coef)와 절편(intercept) 또한 변환된 값에 맞게 스케일링 되어 있기 때문에, 이 값을 활용하여 역변환을 진행합니다. 아래는 대략적인 역변환 코드의 예시입니다.

# RobustScaler의 center_와 scale_을 가져옵니다.
center = robustscaler.center_
scale = robustscaler.scale_

# model_trained.params에는 OLS 모델에서 학습한 계수들이 들어있습니다.
original_coefs = model_trained.params[1:] / scale # 피처들의 계수 역변환
original_intercept = model_trained.params[0] - sum(center / scale * original_coefs) # 절편 역변환

print("역변환된 모델의 계수:", original_coefs)
print("역변환된 모델의 절편:", original_intercept)

해당 코드는 robustscaler와 OLS 모델의 fit() 결과가 들어있는 변수를 사용하여 범위(scale) 회복과 중앙값(center) 조정을 통해 원래의 스케일로 계수를 변환하는 예시입니다. 계수 뿐만 아니라 절편 또한 적절히 조정해주어야 올바른 역변환 결과를 얻을 수 있습니다.

이 예시 코드가 귀하의 문제 해결에 도움이 되었으면 좋겠습니다. 추가적인 궁금증이 있으시다면, 다시 질문해주세요.

고은성님의 프로필 이미지
고은성

작성한 질문수

질문하기