작성
·
33
0
import pandas as pd
import numpy as np
# 가상 데이터 생성
np.random.seed(42)
n_samples = 1000
data = pd.DataFrame({
'rain': np.random.normal(50, 15, n_samples), # 강수량
'wind': np.random.normal(7, 2, n_samples), # 바람
'co2': np.random.normal(400, 50, n_samples), # 이산화탄소 농도
'energy': np.random.normal(100, 20, n_samples) # 에너지 소비
})
# CSV 파일로 저장
data.to_csv('city_climate_energy_data.csv', index=False)
import statsmodels.api as sm
x = data[['rain', 'wind', 'co2']]
y = data['energy']
x2 = sm.add_constant(x)
model = sm.OLS(y, x2)
result = model.fit()
result.summary()
print(result.params['co2'])
1-3. rain=50, wind=7, co2=400일 때 예측값과 그에 대한 95% 신뢰구간을 구하시오.
import pandas as pd
import statsmodels.api as sm
new_data = pd.DataFrame(
{
'rain' : [50],
'wind' : [7],
'co2' : [400]
}
)
# new_data_const = sm.add_constant(new_data)
# print(new_data_const.shape)
pred = result.get_prediction(new_data)
pred.summary_frame(alpha = 0.05)
ValueError Traceback (most recent call last)
<ipython-input-67-3154375170> in <cell line: 0>()
13 # print(new_data_const.shape)
14
---> 15 pred = result.get_prediction(new_data)
16 pred.summary_frame(alpha = 0.05)
2 frames
/usr/local/lib/python3.11/dist-packages/statsmodels/regression/linear_model.py in predict(self, params, exog)
407 exog = self.exog
408
--> 409 return np.dot(exog, params)
410
411 def get_distribution(self, params, scale, exog=None, dist_class=None):
ValueError: shapes (1,3) and (4,) not aligned: 3 (dim 1) != 4 (dim 0)
import statsmodel.api as sm
라이브러를 사용하니
1-3 문제의 경우에 상수항때문에 에러가 발생하네요.
statsmodels.formula.api import ols 를
사용하는게 가장 최선일까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. Data_E님이 질문하신 다중선형 회귀 분석에서의 상수항 문제에 대해 설명드리겠습니다.
상수항의 의미: 회귀 분석에서 상수항(절편)은 모든 독립 변수들이 0일 때 종속 변수의 값을 예측하는데 사용됩니다. 대부분의 경우, 상수항을 포함하는 것이 모델의 예측 정확도를 높여줍니다.
상수항 누락 시 에러: 상수항을 포함하지 않은 데이터로 예측을 시도하면, Shape mismatch 에러가 발생할 수 있습니다. 예측하려는 데이터에도 모델 학습 시 사용한 자료의 형태와 맞춰 상수항을 추가해야 합니다.
new_data에 상수항을 추가하지 않아 발생한 오류입니다. 따라서 new_data에도 기존 독립 변수 행렬과 동일하게 상수항을 추가해야 합니다. 이는 sm.add_constant
를 사용하여 해결할 수 있습니다.
# 예측 데이터를 위한 상수항 추가
new_data_const = sm.add_constant(new_data)
# 예측 수행
pred = result.get_prediction(new_data_const)
confidence_interval = pred.summary_frame(alpha=0.05)
# 결과 출력
print(confidence_interval)
statsmodels.formula.api
의 ols
를 사용하여 R 스타일의 수식으로 모델을 구축하면, 상수항이 자동으로 포함되는 장점이 있습니다. 그러나 기존 방법도 상수항을 명시적으로 추가해주면 문제없이 예측이 가능합니다.
다음과 같은 링크를 참고하셔서 추가하는 방법의 장단점을 비교해보시면 도움이 될 것입니다:
- “Statsmodels로 회귀 분석을 시작하는 법”
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.