인프런 커뮤니티 질문&답변
다중 선형 회귀 상수항 추가 관련 질문
작성
·
12
·
수정됨
0
답변 항상 감사드립니다.
다중 선형 회귀분석에 있어 상수항을 추가하는 sm.add_constant를 쓰는 경우가 있고,
안쓰는 경우가 있는것 같아 질문드립니다.
8회 3유형 2번 문제는 쓰셨고,
10회 3유형 2번 문제는 상수항을 추가 안하셨는데,
상수항 추가 함수를 쓰고 안쓰고의 기준이 있을까요?
써야하는 경우 설명 가능하신지 여쭤뵙니다.
추가질문)
2유형 문제풀이시
pd.get_dummies를 활용한 원핫인코딩과
LabelEncoder를 활용한
모델 결과값이 왜 크게 차이가 있나 질문입니다.
실험결과,
x가 범주형일경우 LabelEncoder가 더 적합한 핏을 보이나,
계량경제학적으로 어떠한 이유로 이러한 결과가 있나 여쭤뵙니다.
답변 2
0
안녕하세요, 이진형님. 좋은 질문 감사합니다!
1. sm.add_constant() 사용 여부의 차이
말씀하신 대로 8회와 10회 문제에서 상수항 처리 방법이 다릅니다. 그 이유는 사용한 함수가 다르기 때문입니다.
8회 방식 - sm.OLS() 사용 시:
import statsmodels.api as sm
X = df[['변수1', '변수2']]
X = sm.add_constant(X) # 수동으로 상수항 추가 필요
y = df['price']
model = sm.OLS(y, X).fit()
10회 방식 - ols(formula) 사용 시:
from statsmodels.formula.api import ols
formula = 'price ~ age + school_distance + subway_distance'
model = ols(formula, data=df).fit() # 자동으로 절편 포함됨
차이점 정리:
sm.OLS(): 행렬 형태로 직접 입력 →sm.add_constant()필요합니다ols(formula): R 스타일 수식 사용 → 자동으로 절편 추가합니다.
따라서 10회 문제에서는 ols(formula) 방식을 사용했기 때문에 별도로 sm.add_constant()를 추가할 필요가 없었습니다.
2. pd.get_dummies vs LabelEncoder
2유형 문제에서 범주형 변수 처리 시:
pd.get_dummies() - 원핫인코딩:
df_encoded = pd.get_dummies(df, columns=['category'], drop_first=True)
범주를 여러 이진(0/1) 컬럼으로 변환 합니다.
명목형 변수(성별, 지역 등)에 적합합니다.
LabelEncoder - 레이블인코딩:
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['category_encoded'] = le.fit_transform(df['category'])
범주를 단일 숫자(0, 1, 2...)로 변환합니다
순서형 변수(학년, 등급 등)에 적합합니다
모델이 숫자 간 크기 관계를 학습할 수 있습니다
진형님이 말씀하신 실험 결과 차이 이유는 다음과 같습니다.
x가 범주형이고 순서 의미가 있다면 LabelEncoder가 효과적입니다.
순서가 없는 명목형이라면 원핫인코딩이 더 정확합니다
모델 종류(선형회귀, 트리 계열)에 따라 결과 달라질 수 있습니다.
시험 대비 팁:
formula 방식 사용 시 → 상수항 자동 포함합니다.
OLS() 직접 사용 시 → sm.add_constant() 필수로 쓰셔야합니다
범주형 변수는 문제 조건 확인 후 적절한 인코딩 선택하세요.
진형님의 좋은 질문 정말 감사합니다.
추가 질문 있으시면 언제든지 댓글 남겨주세요!
0
안녕하세요, 인프런 AI 인턴입니다. 이진형님이 질문하신 다중 선형 회귀분석에서의 상수항 추가와 인코딩 관련 차이에 대한 답변을 드리겠습니다.
상수항 추가의 기준
다중 선형 회귀 분석에서 상수항(절편)을 추가하는 이유는 모델이 데이터의 일반적인 패턴을 더 잘 설명할 수 있게 하기 위함입니다. 상수항이 없으면 모든 독립변수가 0일 때 종속변수 또한 0이 된다는 가정 하에 모델이 만들어집니다. 이는 대부분의 경우 현실적이지 않습니다.
상수항을 추가해야 하는 경우:
- 일반적인 회귀 모델에서는 상수항을 추가하는 것이 기본입니다.
sm.add_constant()를 통해 독립변수 행렬에 상수항을 추가하여 모델이 중간값을 조절하도록 합니다.
- 데이터 자체가 절대적으로 범주형 값만 다루지 않고, 연속적인 수치 데이터를 다룰 때 특히 중요합니다.
- 일반적인 회귀 모델에서는 상수항을 추가하는 것이 기본입니다.
상수항을 제외하는 경우:
- 일부 실험적이거나 특정 개념적인 경우에는 상수항을 뺄 수 있습니다. 그러나 대부분의 실전 데이터 분석에서는 상수항을 포함하는 것이 일반적입니다.
- 일부 실험적이거나 특정 개념적인 경우에는 상수항을 뺄 수 있습니다. 그러나 대부분의 실전 데이터 분석에서는 상수항을 포함하는 것이 일반적입니다.
원핫 인코딩과 Label Encoding의 차이
pd.get_dummies():
- One-Hot Encoding을 수행하며, 각 범주를 개별 열로 확장하고, 이진 값을 할당합니다.
- 범주들이 서로 연관이 없고 순서가 중요하지 않을 때 적합합니다.
- 모델에는 각 열이 독립적인 피처로 인식되며 가중치 계산 시 부적절한 순위 처리가 피할 수 있습니다.
- One-Hot Encoding을 수행하며, 각 범주를 개별 열로 확장하고, 이진 값을 할당합니다.
LabelEncoder 사용:
- 각 범주를 정수형 코드로 변환하여 범주 간의 상대적 크기를 부여합니다.
- 범주의 순위나 크기 정보가 존재할 때 유용할 수 있지만, 그렇지 않은 경우 모델이 범주의 순위를 잘못 이해할 수 있어 성능에 영향을 줄 수 있습니다.
- 특히 트리 기반 모델에서는 범주형 데이터를 직접 처리할 수 있는 Kepler 기법 덕에, Label Encoding이 더 적합한 결과를 보일 수 있습니다.
- 각 범주를 정수형 코드로 변환하여 범주 간의 상대적 크기를 부여합니다.
결과값 차이의 이유:
- 원핫 인코딩은 데이터의 희소성을 더할 수 있지만, 모델이 각 변수를 독립적으로 이해하게 하여 연산적 비용이 큽니다.
- 반면 Label Encoding은 간결함을 유지하지만, 범주 간의 관계가 부여되어 결과값에 영향을 미칠 수 있습니다. 이는 계량경제학적으로 모델이 선형적 경향성을 검출하려 할 때 의도치 않은 왜곡을 줄 수 있는 이유입니다.
이해를 돕기 위해 관련 논의를 포함한 링크를 제공합니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





