강의

멘토링

로드맵

Inflearn brand logo image

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

Data_E님의 프로필 이미지
Data_E

작성한 질문수

[2025년 최신 기출 반영] 빅데이터 분석 기사 실기 시험 100% 합격 ! 기출 문제의 패턴이 보인다 !

2025년_6월_변경된 체험환경 작업형3번

상수항 질문드립니다. (6회 작업형 2문제)

작성

·

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님이 질문하신 다중선형 회귀 분석에서의 상수항 문제에 대해 설명드리겠습니다.

상수항 추가 중요성

  1. 상수항의 의미: 회귀 분석에서 상수항(절편)은 모든 독립 변수들이 0일 때 종속 변수의 값을 예측하는데 사용됩니다. 대부분의 경우, 상수항을 포함하는 것이 모델의 예측 정확도를 높여줍니다.

  2. 상수항 누락 시 에러: 상수항을 포함하지 않은 데이터로 예측을 시도하면, 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.apiols를 사용하여 R 스타일의 수식으로 모델을 구축하면, 상수항이 자동으로 포함되는 장점이 있습니다. 그러나 기존 방법도 상수항을 명시적으로 추가해주면 문제없이 예측이 가능합니다.

다음과 같은 링크를 참고하셔서 추가하는 방법의 장단점을 비교해보시면 도움이 될 것입니다:
- “Statsmodels로 회귀 분석을 시작하는 법”

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Data_E님의 프로필 이미지
Data_E

작성한 질문수

질문하기