로지스틱 회귀는 이진 결과를 예측하는 통계 기법입니다. 현재 금융에서 의학, 범죄학 및 기타 사회 과학에 이르기까지 다양한 분야에서 적용되고 있기 때문에 새로운 것은 아닙니다.
이 섹션에서는 Python을 사용하여 로지스틱 회귀를 개발할 것입니다. 하지만 R과 같은 다른 언어를 사용하여 동일하게 구현할 수도 있습니다.
설치
예제 프로그램에서 아래 라이브러리를 사용할 것입니다.
-
넘피 :숫자 배열과 행렬을 정의하려면
-
판다 :데이터를 처리하고 조작하기 위해
-
통계 모델 :매개변수 추정 및 통계 테스트 처리
-
Pylab :플롯을 생성하려면
CLI에서 아래 명령을 실행하여 pip를 사용하여 위의 라이브러리를 설치할 수 있습니다.
>numpy pandas statsmodels를 pip 설치
로지스틱 회귀의 사용 사례 예
파이썬에서 로지스틱 회귀를 테스트하기 위해 UCLA(디지털 연구 및 교육 연구소)에서 제공하는 로짓 회귀 데이터를 사용할 것입니다. csv 형식의 아래 링크에서 데이터에 액세스할 수 있습니다. https://stats.idre.ucla.edu/stat/data/binary.csv
나는 이 csv 파일을 내 로컬 컴퓨터에 저장했고 거기에서 데이터를 읽을 것입니다. 둘 중 하나를 수행할 수 있습니다. 이 csv 파일을 사용하여 대학원 입학에 영향을 미칠 수 있는 다양한 요소를 식별할 것입니다.
필수 라이브러리 가져오기 및 데이터세트 로드
pandas 라이브러리(pandas.read_csv)를 사용하여 데이터를 읽을 것입니다.
판다를 pdimport statsmodels.api로 smimport pylab으로 plimport numpy로 npdf =pd.read_csv('binary.csv')#링크에서 직접 데이터를 읽을 수 있습니다. \# df =pd.read_csv('https://stats.idre.ucla.edu/stat/data/binary.csv')print(df.head())
출력
승인 gre gpa rank0 0 380 3.61 31 1 660 3.67 32 1 800 4.00 13 1 640 3.19 44 0 520 2.93 4
위의 출력에서 알 수 있듯이 하나의 열 이름은 'rank'인데 'rank'도 pandas 데이터 프레임의 메서드 이름이므로 문제가 발생할 수 있습니다. 혹시라도 충돌을 피하기 위해 랭크 컬럼의 이름을 '명품'으로 변경하겠습니다. 데이터세트 열 이름을 변경해 보겠습니다.
df.columns =["승인", "gre", "gpa", "명성"]print(df.columns)
출력
Index(['admit', 'gre', 'gpa', 'prestige'], dtype='object')[ ]:
이제 모든 것이 괜찮아 보입니다. 이제 데이터세트에 포함된 내용을 훨씬 더 자세히 볼 수 있습니다.
#데이터 요약
pandas describe 함수를 사용하여 모든 것을 요약한 보기를 얻을 수 있습니다.
인쇄(df.describe())
출력
인정 GRE GPA prestigecount 400.000000 400.000000 400.000000 400.00000mean 587.700000 0.317500 3.389900 0.466087 2.48500std 115.516536 0.380567 0.000000 0.94446min 220.000000 2.260000 1.0000025 0.000000 % 520.000000 3.130000 2.0000050 0.000000 % 580.000000 3.395000 2.0000075 1.000000 % 660.000000 3.670000 1.000000 3.00000max 800.000000 4.000000 4.00000 사전>승인 gre gpa 명성_2 명성_3 명성_40 0 380 3.61 0 1 01 1 660 3.67 0 1 02 1 800 4.00 0 0 03 1 640 3.19 0 . 5 200 2우리는 데이터의 각 열의 표준 편차 및 명성을 깎는 빈도 테이블과 누군가의 합격 여부를 얻을 수 있습니다.
# 각 column의 표준편차를 살펴봅니다.print(df.std())출력
0.466087gre 115.516536gpa 0.380567prestige 0.944460dtype:float64 인정예
# 프레스티지 절단 빈도 테이블 및 누군가가 승인되었는지 여부print(pd.crosstab(df['admit'], df['prestige'], rownames =['admit']))출력
명예 1 2 3 4admit0 28 97 93 551 33 54 28 12데이터세트의 모든 열을 플롯해 보겠습니다.
# 모든 열을 플롯합니다.df.hist()pl.show()출력
더미 변수
Python pandas 라이브러리는 범주형 변수가 표현되는 방식에 큰 유연성을 제공합니다.
# 더미화 rankdummy_ranks =pd.get_dummies(df['prestige'], prefix='prestige')print(dummy_ranks.head())출력
프레스티지_1 프레스티지_2 프레스티지_3 프레스티지_40 0 0 1 01 0 0 1 02 1 0 0 03 0 0 0 14 0 0 0 1예
# 회귀를 위한 깨끗한 데이터 프레임 생성cols_to_keep =['admit', 'gre', 'gpa']data =df[cols_to_keep].join(dummy_ranks.ix[:, 'prestige_2':])출력
회귀 수행
이제 우리는 아주 간단한 로지스틱 회귀를 할 것입니다. 예측하려는 변수가 포함된 열과 예측을 위해 모델이 사용해야 하는 열을 지정하기만 하면 됩니다.
이제 gre, gpa 및 prestige 더미 변수 prestige_2, prestige_3 및 prestige_4를 기반으로 허용 열을 예측합니다.
train_cols =data.columns[1:]# Index([gre, gpa, prestige_2, prestige_3, prestige_4], dtype=object)logit =sm.Logit(data['admit'], data[train_cols])# 모델에 맞게 결과 =logit.fit()
출력
최적화가 성공적으로 종료되었습니다.현재 함수 값:0.573147반복 6
결과 해석
statsmodels를 사용하여 요약 출력을 생성해 보겠습니다.
인쇄(결과.summary2())
출력
결과:Logit=================================================================모델:Logit 번호 반복:6.0000종속 변수:승인 의사 R-제곱:0.083날짜:2019-03-03 14:16 AIC:470.5175 아니요. 관측값:400 BIC:494.4663Df 모델:5 로그 우도:-229.26Df 잔차:394 LL-널:-249.99수렴:1.0000 척도:1.0000------------------ -----------------------------------------------코프. 표준 오류 z P>|z| [0.025 0.975]------------------------------------------------------------ ----------------------------------------------------104 -0.6754PRESTIGE_2 -0.6754 0.3165 -2.1342 0.0328 -1.2958 -0.0551PRESTIGE_3 -1.3402 0.3453 -3.8812 0.0001 -2.0170 -0.6634명성_4 -1.5515 0.4178 -3.7131 0.0002 -2.3704 -0.7325절편 -3.9900 1.1400 -3.5001 0.0005 -6.222 =======================================
위의 결과 개체를 통해 모델 출력의 일부를 분리하고 검사할 수도 있습니다.
#각 coeffecientprint(result.conf_int())의 신뢰구간을 봅니다.
출력
0 1gre 0.000120 0.004409gpa 0.153684 1.454391prestige_2 -1.295751 -0.055135prestige_125250inter -2.016992 -0.663416prestige_4 -0.663416prestige_4위의 출력에서 우리는 합격 확률과 후보자의 학부 학교 명성 사이에 역의 관계가 있음을 알 수 있습니다.
따라서 대학원 프로그램에 합격할 확률은 하위 학교(prestige_3 또는 prestige_4)보다 상위 대학에 다니는 학생(prestige_1=True)이 더 높습니다.