반응형
http://blog.yhathq.com/posts/logistic-regression-and-python.html
알고 싶은 것 : GPA, GRE, 모교 우선순위(prestige) 가 대학원 입학 여부에 어떻게 영향을 미치는가?
---------------------------------------------------------------------------------------------------------------------------
위의 블로그의 내용을 요약한 글입니다. 정리한 글은 위의 블로그에 더욱 자세하게 설명되어 있습니다.
환경 : python 2.7, eclipse pydev
1. 데이터 읽기
1 2 3 4 5 6 7 8 9 10 11 12 | import pandas as pd import statsmodels.api as sm import pylab as pl import numpy as np print df.head() df.columns = ["admit", "gre", "gpa", "prestige"] # df의 column 이름 바꾸기 print df.columns | cs |
2. 데이터 요약하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | print df.describe() # 빈도수, 평균, 분산, 최솟값, 최댓값, 1/4분위수, 중위값, 1/4분위수를 나타냄 # admit gre gpa prestige # count 400.000000 400.000000 400.000000 400.00000 # mean 0.317500 587.700000 3.389900 2.48500 # std 0.466087 115.516536 0.380567 0.94446 # min 0.000000 220.000000 2.260000 1.00000 # 25% 0.000000 520.000000 3.130000 2.00000 # 50% 0.000000 580.000000 3.395000 2.00000 # 75% 1.000000 660.000000 3.670000 3.00000 # max 1.000000 800.000000 4.000000 4.00000 print df.std() # 분산 출력 # admit 0.466087 # gre 115.516536 # gpa 0.380567 # prestige 0.944460 print pd.crosstab(df['admit'], df['prestige'], rownames=['admit']) # prestige 1 2 3 4 # admit # 0 28 97 93 55 # 1 33 54 28 12 df.hist() pl.show() # pl.show()를 해야 화면에 띄워준다! 결과는 아래와 같다. 모든 컬럼에 대해 히스토그램을 그림 | cs |
3. 더미변수로 고치기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | dummy_ranks = pd.get_dummies(df['prestige'], prefix='prestige') print dummy_ranks.head() # prestige_1 prestige_2 prestige_3 prestige_4 # 0 0 0 1 0 # 1 0 0 1 0 # 2 1 0 0 0 # 3 0 0 0 1 # 4 0 0 0 1 cols_to_keep = ['admit', 'gre', 'gpa'] data = df[cols_to_keep].join(dummy_ranks.ix[:, 'prestige_2':]) print data.head() # admit gre gpa prestige_2 prestige_3 prestige_4 # 0 0 380 3.61 0 1 0 # 1 1 660 3.67 0 1 0 # 2 1 800 4.00 0 0 0 # 3 1 640 3.19 0 0 1 # 4 0 520 2.93 0 0 1 data['intercept'] = 1.0 | cs |
4. 회귀분석을 시행한다.
123456 train_cols = data.columns[1:]logit = sm.Logit(data['admit'], data[train_cols])result = logit.fit()print result.summary()cs
Logit Regression Results ============================================================================== Dep. Variable: admit No. Observations: 400 Model: Logit Df Residuals: 394 Method: MLE Df Model: 5 Date: Sun, 03 Mar 2013 Pseudo R-squ.: 0.08292 Time: 12:34:59 Log-Likelihood: -229.26 converged: True LL-Null: -249.99 LLR p-value: 7.578e-08 ============================================================================== coef std err z P>|z| [95.0% Conf. Int.] ------------------------------------------------------------------------------ gre 0.0023 0.001 2.070 0.038 0.000 0.004 gpa 0.8040 0.332 2.423 0.015 0.154 1.454 prestige_2 -0.6754 0.316 -2.134 0.033 -1.296 -0.055 prestige_3 -1.3402 0.345 -3.881 0.000 -2.017 -0.663 prestige_4 -1.5515 0.418 -3.713 0.000 -2.370 -0.733 intercept -3.9900 1.140 -3.500 0.000 -6.224 -1.756 ==============================================================================
coef에 주목한다. gre:0.0023 gpa :0.840, prestige_2 : -0.6754 등등...
coef(편회귀계수)의 값이 양수이면 그 컬럼의 값이 커질수록 목적변수가 TRUE일 확률 즉, admit=1일 확률이 높아진다.
반대로 coef의 값이 음수이면 그 컬럼의 값이 커질수록 목적변수가 FALSE일 확률 즉, admin=0일 확률이 높아진다.
즉 GRE나 GPA가 커질수록 대학원에 입학할 확률은 커지고 prestige_2, prestige_3이 커질수록 대학원에 입학할 확률은 작아진다.
이러한 경향은 pretige가 낮아질수록 심해진다.
5. odds ratio
1234567 print np.exp(result.params)# gre 1.002267# gpa 2.234545# prestige_2 0.508931# prestige_3 0.261792# prestige_4 0.211938# intercept 0.018500cs
반응형
'Tools > Python' 카테고리의 다른 글
Spyder IDE를 anaconda virtual environment에서 실행하는 법 (0) | 2017.08.03 |
---|---|
Python - 선형회귀분석 (& 교호작용을 고려한 선형회귀분석) (0) | 2017.06.29 |
주피터 노트북 팁 1 - 단축키, 변수 출력, 도큐먼트 찾기 (0) | 2017.04.03 |
Python - opencv 설치 (ImportError: No module named cv2) (1) | 2017.01.31 |
Python - 로지스틱 회귀분석2 (0) | 2016.12.29 |