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

루루님의 프로필 이미지
루루

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

예시문제 작업형3(신 버전) 🆕 updated 2023.11 / 로지스틱 회귀

logit 범주형 C() 처리

작성

·

26

0

안녕하세요!

작업형 3번중 종속변수 말고

범주형 변수에는 C()를 다 붙여도 된다고 하셨는데

 

수강생 작성

model = logit("Survived~ C(Gender) + C(SibSp) + C(Parch) + C(Fare)", data=df).fit()

print(model.summary())

로 작성하게 되면 에러가 발생합니다!

혹시 이유를 알 수 있을까요?


에러는 참고로 남기겠습니다!

 

> Warning: Maximum number of iterations has been exceeded.

Current function value: inf

Iterations: 35

Makefile:6: recipe for target 'py3_run' failed

make: *** [py3_run] Error 1

/usr/local/lib/python3.12/site-packages/statsmodels/discrete/discrete_model.py:2385: RuntimeWarning: overflow encountered in exp

return 1/(1+np.exp(-X))

/usr/local/lib/python3.12/site-packages/statsmodels/discrete/discrete_model.py:2443: RuntimeWarning: divide by zero encountered in log

return np.sum(np.log(self.cdf(q * linpred)))

Traceback (most recent call last):

File "/goorm/Main.out", line 23, in <module>

model = logit("Survived ~ C(Gender) + C(SibSp) + C(Parch) + C(Fare)", data=df).fit()

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.12/site-packages/statsmodels/discrete/discrete_model.py", line 2601, in fit

bnryfit = super().fit(start_params=start_params,

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.12/site-packages/statsmodels/discrete/discrete_model.py", line 243, in fit

mlefit = super().fit(start_params=start_params,

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.12/site-packages/statsmodels/base/model.py", line 582, in fit

Hinv = np.linalg.inv(-retvals['Hessian']) / nobs

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.12/site-packages/numpy/linalg/linalg.py", line 561, in inv

ainv = umathlinalg.inv(a, signature=signature, extobj=extobj)

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/usr/local/lib/python3.12/site-packages/numpy/linalg/linalg.py", line 112, in raiselinalgerror_singular

raise LinAlgError("Singular matrix")

numpy.linalg.LinAlgError: Singular matrix


 

강사님 작성

model = logit("Survived ~ C(Gender) + SibSp + Parch + Fare", data=df).fit()

print(model.summary())

에러없음

답변 2

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

범주형 변수에는 C()를 다 붙여도 된다고 하셨는데 -> 로지스틱 회귀분석에서는 이런말을 한 기억이 없는데 어디서 이런 말을 했을까요?(강의 시간대를 알려주실 수 있을까요?)

회귀분석이나 로지스틱회귀분석에서 C()는 문제에서 해당컬럼이 범주형이라고 명시했을 때만 붙여주세요

루루님의 프로필 이미지
루루
질문자

이원 분산 분석중에서

anova 테이블

from statsmodels.formula.api import ols

from statsmodels.stats.anova import anova_lm

model = ols('토마토수 ~ C(종자) + C(비료) + C(종자):C(비료)', data=df).fit()

anova_lm(model)

 

이 코드로 말씀하셨었습니다 !

logit이랑은 다르게 말씀하신거면 제가 잘못 기억하고있었던것같습니다.

강의중 말씀하셨던 부분은 종속변수는 수치형 변수니 C()로 감쌀 필요 없고,

독립변수에는 범주형 데이터가 있을때는 모두 다 감싸는게 안전할것같다고 말씀해주셨습니다.

이원분산분석도 회귀분석파트라고 생각했는데 아니였다면 제가 이해를 잘 못한것같습니다.

 

이 부분 답글 주시면 다시 공부해두겠습니다..

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

네 다릅니다.

회귀나 로지스틱 회귀에서는 자동처리 되도록 C()를 감싸지 말아주세요!

다만 문제에서 명확하게! 숫자이지만 범주형 변수라고 지정한다면 그 변수만 C()로 감싸주세요!!:)

응원합니다!!!

루루님의 프로필 이미지
루루
질문자

죄송하고 감사합니다 강사님 ㅠㅠ!

0

안녕하세요, 인프런 AI 인턴입니다. 루루님께서 문의 주신 logit 범주형 C() 처리 문제에 대해 설명해드리겠습니다.

범주형 변수에 C()를 사용하는 것은 데이터 분석 과정에서 범주형 변수를 명시적으로 처리하기 위함입니다. 그러나 모든 변수에 C()를 임의로 사용하면 문제가 발생할 수 있습니다.

특히 에러 메시지에 나타난 Singular matrix는 모델 피팅 과정에서 독립변수들 간에 선형 독립성을 잃는 경우 발생합니다. 즉, 독립변수 중 일부가 다른 변수의 조합으로 설명 가능해져서 행렬이 단수가 됩니다. 이런 상황에서 가장 흔한 원인은 범위가 작거나 정보가 중복되는 데이터를 가진 변수를 불필요하게 C()로 감싸는 경우입니다.

범주형 변수 처리 팁

  1. 명확한 범주형 변수만 C()로 처리: 예를 들어, Gender는 명확한 범주형이므로 C()로 처리해야 하지만, SibSp, Parch, Fare는 이미 수치형으로 간주되며, 필요에 따라서는 수치형 그대로 분석해야 하는 경우가 많습니다.

  2. 변수의 도메인 지식 활용: 데이터에 대한 배경 지식을 바탕으로 범주형인지 수치형인지를 명확히 해야 합니다.

  3. 경고 메시지 주의: 경고 메시지에서 언급되듯이, iteration이 비정상적으로 많거나 overflow, divide by zero 같은 문제가 나타날 때는 변수의 변환이나 모델의 설정을 재검토해야 합니다.

  4. 데이터 전처리 확인: 누락값, 극단값 또는 전처리 과정의 실수로 인해 변수가 불필요하게 단수가 될 수 있는지 확인해 보세요.

더 깊이 있는 학습을 원하신다면, 기존에 대한 질문들을 참고하시면 좋을 것 같습니다. 관련 유사 질문으로는:

해당 질문들은 범주형 변수 처리와 관련된 더욱 풍부한 설명과 해결책 제공에 도움이 될 수 있습니다.

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

루루님의 프로필 이미지
루루

작성한 질문수

질문하기