해결된 질문
작성
·
501
0
로지스틱 회귀분석관련 캐글에 있는 문제 ( T3-2-example-py ) 풀이 질문입니다.
정답 풀이는 스탯츠모델 포뮬라로 다음과 같이 되어있는데요,
import pandas as pd
from statsmodels.formula.api import logit
df = pd.read_csv("/kaggle/input/bigdatacertificationkr/Titanic.csv")
formula = "Survived ~ C(Pclass) + Gender + SibSp + Parch"
model = logit(formula, data=df).fit()
Optimization terminated successfully.
Current function value: 0.459565
Iterations 6
Intercept 2.491729
C(Pclass)[T.2] -0.848152
C(Pclass)[T.3] -1.866905
Gender[T.male] -2.760281
SibSp -0.232553
Parch -0.049847
dtype: float64
사이킷런 LogisticRegression으로 해서 coefficient 를 찾아도 되지 않나 싶어 해보니,
이경우는 원핫인코딩을 해야해서, Gender 변수가 나누어지고,
SibSP와 Parch 계수 값만 비교해봐도 결과가 약간 다르게 나오는데, 어떤게 맞는걸까요 ?
(아래 사이킷런에서 Parch 계수는 -0.04398284, 위 스탯츠포뮬라에서 Parch계수는 -0.049847)
from sklearn.linear_model import LogisticRegression
df = pd.get_dummies(df, columns=['Gender'])
cols = ['Pclass', 'Gender_female', 'Gender_male', 'SibSp', 'Parch']
model = LogisticRegression()
model.fit(df[cols], df['Survived'])
coefficients = model.coef_
intercept = model.intercept_
print("Coefficients:", coefficients)
print("Intercept:", intercept)
Coefficients: [[-0.92192738 1.35286636 -1.35285472 -0.2285361 -0.04398284]]
Intercept: [2.02953505]
답변주시면, 감사하겠습니다
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 황진경님.
로지스틱 회귀분석 시에 사용되는 라이브러리나 방법에 따라 약간의 차이가 발생할 수 있습니다. 여기서 스탯츠모델(Statsmodels)과 사이킷런(Scikit-learn)의 결과가 약간 다른 것은 정규화(regularization), 데이터 전처리, 기본값 설정의 차이 때문일 수 있습니다.
스탯츠모델은 기본적으로 데이터를 그대로 사용하며, C() 함수를 통해 범주형 변수를 자동으로 다루어줍니다. 반면에 사이킷런은 기본적으로 L2 정규화를 적용하고, get_dummies를 통해 수동으로 원-핫 인코딩을 해주어야 해서 결과가 다를 수 있습니다. 사이킷런에서 정규화를 제외하고 싶다면 LogisticRegression(penalty='none')
을 사용할 수 있습니다.
parch 변수의 계수값이 스탯츠모델에서는 -0.049847로 나타났고, 사이킷런에서는 -0.04398284로 나타났습니다. 두 방법 모두 통계적으로 유효한 접근법이며, 결과값의 차이는 위에서 언급한 이유로 인한 것으로 보입니다.
정답을 찾기 위해서는 문제에서 요구하는 방식이 무엇인지와, 특정 규칙이나 가정이 있는지를 확인하는 것이 중요합니다. 예를 들어 정규화를 적용하지 않는 것을 요구하면 사이킷런 사용 시 regularization 관련 파라미터를 조정해야 합니다.
따라서 어떤 것이 ‘맞다’고 말하기보다는 각 방법의 특징을 이해하고 문제의 요구사항에 맞게 적용하는 것이 중요합니다.
추가적인 질문이 있으시다면 인프런 FAQ나 직접 문의하기를 통하여 자세한 답변을 받아보실 수 있습니다.
감사합니다.