변수선택 8 경제성의 원리로 불리우는 Occam s Razor는 어떤 현상을 설명할 때 불필요한 가정을 해서는 안 된다는 것이다. 같은 현상을 설 명하는 두 개의 주장이 있다면, 간 단한 쪽을 선택하라. 통계학의 유 의성 검정, 유의하지 않은 설명변 수 제거의 근거가 된다.
섹션 1 개요 개념 1) 경험이나 이론에 의해 종속변수에 영향을 미칠 것 같은 설명변수를 선택하고 선 형 회귀 모형을 설정한다. 2) 데이터를 수집 후 회귀모형의 회귀계수를 추정하고(OLS) F-검정에 의해 모형의 유의성을 검정한다.(H0 :β1 =β2 =...=βp =0,모든설명변수는유의하지않다) 유의하지 않은 순서대로 하나씩 제외함 : 유의확률이 가장 크거나 t-통계량이 가 장 작은 순서대로 모형 내 모든 설명변수가 유의할 때까지 반복 제거함 다중공선성 분석과 순서 문제 설명변수들 간 높은 상관관계로 인하여 발생하는 다중공선성 문제 해결과 유의한 설 명변수 선택 중 어느 단계가 먼저인가? 다중공선성 진단이 먼저이나 어느 단계를 먼 저해도 동일 결과를 얻는 경우가 대부분이므로 간편 작업(변수선택 과정을 먼저 거 치면 다중공선성 진단을 하면 진단 변수의 수가 줄어듬)을 위하여 변수선택을 먼저 하는 것이 적절함 3) F-검정(분산분석) 결과 귀무가설이 기각되면 t-검정을 이용하여 회귀계수(설명변 수)의 유의성 검정을 한다. 4) 유의하지 않은 설명변수를 하나씩 제외하면서 모든 변수가 유의할 때까지 계속한 다. 어 떤 설명변수를 제외할 것인가? 가장 유의하지 않은 설명변수, 즉 t검정통계량 값이 가 장 작은 것(p-value가 가장 큰 것)을 제외한다. 5) 비록 유의확률이 다른 것에 비해 다소 적더라도 분석자의 판단에 의해 설명변수 를 제외 할 수 있다. 수작업 1) 모형 유의성 검정 - F 검정 귀무가설 : 모든 설명변수가 유의하지 않음 - 선택되면 분석 종료 대립가설이 선택되어 모형 내 설정한 설명변수 중 적어도 하나라도 유의하면 다 음 단계로 넘어간다. 2) 개별 설명변수 - t 검정 각 설명변수(예측변수)의 유의성 검정 85
섹션 2 통계량 이용 수정결정계수 결정계수 Determination Coefficient = SSRp SST = 1 그러나 설명변수의 증가로 줄어든 SSE의 값과 오차 자유도의 감소가 상쇄되므 로 설명력의 지표로 좋은 것은 아니다. 그리고 유의성을 검정할 검정통계량이 존 재하지 않는다. 수정결정계수는 설명변수 군과 개수가 서로 다른 회귀모형의 설명력을 비교할 때 사용된다. 종속변수의 예측 값을 높이는 모형을 선택하는 것이 분석 목적이라면 이 방법을 이용하여 최적 모형을 찾으면 됨 SSEp SST SST/n 1 수정(adjusted) 결정계수는 결정계수의 문제점(유의하지 않은 설명변수가 삽입 되어도 항상 증가)을 해결하기 위하여 계산되는 척도 가정 : e N(0, σ 2 I ) Rp2 = 1 SSEp /(n p 1) 다중회귀모형 모형 : y = Xb + e, 설명변수 벡터 x = (x1, x2,, xp) 2 Radj Rp2 는 모형내의 p개 설명변수들의 종속변수 (총)변동에 대한 설명력의 정도를 나 타내는 수치이므로 변수선택의 지표가 된다. 결정계수의 크기가 70%, 설명변수 수가 약간 충분함, 80% 이상이면 충분, 90% 이상 매우 충분 - 현재 선택된 설명변수만으로 종속변수 변동을 예측할(설 명) 수 있음 설명변수의 개수가 같은 경우 어떤 변수 그룹이 설명력이 높은가를 쉽게 알아보 는 사용할 수 있으나 검정 통계량은 존재하지 않는 단점이 있다. 그러나 설명변수 개수가 증가할 때 마다 결정계수는 항상 증가하므로 변수의 개 수가 다른 경우에는 수정 결정 계수를 사용하는 것이 좋다. Mallow Cp = SSEp MSEF n+ 2(p + 1) Mallow Cp 값이 설명변수 개수()와 근사한 경우 좋은 회귀 모형으로 판단한다. 여전히 이 방법에서도 각 설명변수의 유의성에 대한 검정을 실시한 것은 아니다. (이론적 근거) MSE(F ) = σ 2 이고 만약 모형이 적합하다면 Cp ( p + 1) Mallow Cp는 변수의 개수+1(절편)와 같다. 86
PRESSp = )2 (yi y(i) 예측잔차자승합(Prediction REsidual Sum of Squares) y(i) : i-번째 관측치를 제외한 후 모형을 추정한 후 구한 종속변수 yi의 적합값 ) i-번째 관측치 제외 잔차 = (yi y(i) 잔차자승합 PRESS 값이 적을수록 좋은 모형 Comment (수정)결정계수, Mallow, PRESS 통계량 이용 방법은 어떤 변수 군들이 좋은지 에 대한 지표만을 제공할 뿐 변수의 유의성은 검정되지 않았다. 일반적으로 이 방법들을 이용할 때는 수정 결정 계수와 Mallow Cp 에 의해 좋다 고 간주되는 변수 군들을 몇 개 선택하고 각 변수 군에 대해 PRESS 값을 계산 하여 최적 변수 군을 선택하면 된다. PRESS는 전혀 다른 변수 군을 비교할 때(변수들이 모두 유의한 경우) 사용되므 로 널리 사용된다. 서로 다른 변수 군의 적합 정도 비교 시 사용된다. AIC, SBC 모두 작을수록 적 합도가 높다. AIC(Akaike Information Criteria) A IC = n* ln(sse /n) + 2( p 1) SBC(Schwarz's Bayesian criterion) SBC = n* ln(sse /n) + ( p 1)ln(n) 87
섹션 3 유의성 검정 Backward 후진제거 추가 자승합 Full Model 모형 : y n 1 = Xn ( p+ 1) b( p+ 1) 1 + en 1, 설명변수 벡터 x = (x1, x2,, xp) 총변동 SSTF. 모형변동 SSRF (d f = p), 오차변동 SSEF (d f = n p 1) 오차분산(σ 2) 추정량 = MSEF = SSEF n p 1 모든 설명변수를 고려한 모형에서 유의하지 않은 설명변수를 하나씩 제거하는 방법 이다. 1) 고려된 설명변수를 모두 삽입한 후 설명변수 중 가장 유의하지 않은(유의확률이 가장 큰) 설명변수를 제외 2) 가장 유의하지 않다는 것은 다음 검정 결과 유의하지 않고 F값이 가장 작은 설명 변수를 의미한다. SSER(no Xk ) SSEF F(1,n p 1) MSEF 3) 모든 설명변수가 유의할 때까지 2)과정을 반복한다. Reduced Model 귀무가설 : 일부 설명변수가 유의하지 않다. 유의하지 않은 설명변수 개수 = p k 모형 : y n 1 = Xn (k+ 1) b(k+ 1) 1 + en 1, 설명변수 벡터 x = (x1, x2,, xk ), k < p 전진삽입 forward 1) 고려된 설명변수 중 설명력(SSR(Xk ) )이 가장 높고(유의확률이 가장 작음) 설명 력이 유의하면 변수를 선택한다. 총변동 SSTR. 모형변동 SSRR(d f = k), 오차변동 SSER(d f = n k 1) 검정통계량 SSRF SSRR SSER SSEF = F( p k, n p 1) MSEF MSEF 분자의 자유도는 귀무가설에 의해 줄어든 모수의 개수가 된다. 즉 full 모형의 설명변동과 reduced 모형의 설명변동의 차이가 유의적인가를 검 정하여 귀무가설을 기각, 채택하게 된다. max SSR(Xk ) F(1,n 2) MSE(xk ) 2) 이미 선택된 설명변수( Xk )의 설명 부분을 제외하고 남은 종속변수 변동 중 가장 많이 설명하고 (SSR(Xm Xk )이 가장 큰) 그 설명력이 유의한 경우 Xm을 2번째로 선택한다. max SSR(Xk, Xm ) SSR(Xk ) F(1,n 3) MSE(xk, xm ) 3) 유의한 설명변수가 없을 때까지 2)의 작업을 반복한다. 88
stepwise 단계삽입 최적변수 선택 단계 삽입(stepwise)은 Forward 방법과 유사하지만 한 번 선택된 설명 변수에 대 해서는 유의성 검정을 다시 실시한다는 점이 다르다. 서로 설명변수가 고려된 모형 중 최적 모형을 선택하고자 할 때는 PRESSp 나 수정 1) 고려된 설명변수 중 설명력(SSR(Xk ) )이 가장 높고(유의확률이 가장 작음) 설명 력이 유의하면 변수를 선택한다. = 첫단계는 전진삽입 방법과 동일함 새로운 자료(표본크기 n* ) 수집하고 모형의 예측력을 다음 방법에 의해 계산하여 각 모형을 비교한다. Mean Square Prediction Error 예측오차 평균자승합 2) 이미 선택된 설명변수( Xk )의 설명 부분을 제외하고 남은 종속변수 변동 중 가장 많이 설명하고 (SSR(Xm Xk )이 가장 큰) 그 설명력이 유의한 경우 Xm을 2번째로 선택한다. = 2번째 단계까지도 동일하다. SSR(Xk, Xm ) SSR(Xk ) F(1,n 3) MSE(xk, xm ) 3) 새롭게 선택된 변수( Xm )를 이용하여 기존 선택된 설명변수( )의 유의성을 검증 하여 유의하지 않으면 Xk을 제거한다. SSR(Xk, Xm ) SSR(Xm ) F(1,n 3) MSE(xk, xm ) 결정계수 값을 비교한다. n* MSPR = i (yi yi )2 n* 새로운 자료로 회귀 모형을 추정하였을 때 이전 자료에서 추정된 회귀 모형과 유사 하면 추정된 회귀 모형은 좋다고 판단할 수 있다. 새로운 자료 수집이 불가능한 경우 에는 데이터를 splitting하여 모형추정 데이터와 예측 데이터로 나누어 분석한다. 수정결정계수나 PRESS, AIC, SBC에 의한 최적 회귀모형 선택은 설명변수가 서 로 다른 그룹을 비교할 때 사용되는 통계량이다. 4) 유의한 설명변수가 존재하지 않을 때까지 2)~3)을 반복한다. 방법의 선택 다른 설명 변수가 주어진 경우 각 설명 변수의 설명력을 볼 수 있다는 점에서 어떤 학자들은 변수의 수가 많지 않으면 후진제거 방법을 많은 경우는 전진삽입 방법이 적합한 방법이라 한다. 통계 소프트웨어가 발달하기 전에는 계산이 복잡한 단계삽입 (Stepwise) 방법이 선호되지 않았으나 이제는 이 방법이 가장 선호된다. 설명변수 개수가 10개를 넘지 않는 경우는 수작업(t-검정)이 가장 적절하다. 이유는 분석자가 자신의 지식을 이용하여 해석이 용이하거나 더 좋다고 생각하는 변수를 선 택 할 수 있기 때문이다. 89
섹션 4 in Python 3) 상관계수 행렬 SMSA 예제 계속 종속변수 Mortality와 상관계수 높은 5개 변수 출력 1) 결측치 제외 => income 변수에 결측치가 존재함 => 결측치가 1개 제외되어 표본크기=59 2) 기초통계량 90
종속변수 상관계수 0.4 이상인 변수 출력 후진제거 https://towardsdatascience.com/feature-selection-with-pandas-e3690ad 8504b 유의수준 5% 후진 제거 선택변수 : 1월기온, 강우량, 인구밀도, 비백인비율, 사 무직비율, 오염물질 HCPOT, NOXPOT 회귀분석 모형 전진삽입 https://datascience.stackexchange.com/questions/24405/how-to-do-ste pwise-regression-using-sklearn 91
유의수준 10% 기준(In/Stay) 유의수준: 비백인비율, 교육수준, 1월기온. SO2Pot, 강우량, 7월기온 코드 import pandas as pd import numpy as np smsa=pd.read_csv('http://wolfpack.hnu.ac.kr/stat_notes/adv_stat/linea rmodel/data/smsa.csv') print(smsa.isnull().any()) #check if missing values exist smsa=smsa.dropna() smsa.shape pd.set_option('precision', 2) print(smsa.describe()) correlation = smsa.corr(method='pearson') columns = correlation.nlargest(6, 'Mortality').index columns import seaborn as sns import matplotlib.pyplot as plt #Using Pearson Correlation plt.figure(figsize=(12,10)) cor = smsa.corr() sns.heatmap(cor, annot=true, cmap=plt.cm.reds) plt.show() #Correlation with output variable 92
cor_target = abs(cor['mortality']) #Selecting highly correlated features relevant_features = cor_target[cor_target>0.4] relevant_features X = smsa.drop(['city','mortality'],1) #Feature/Prediction Matrix y = smsa['mortality'] #Target Variable #Adding constant column of ones, mandatory for sm.ols model import statsmodels.api as sm X1 = sm.add_constant(x) #Fitting sm.ols model model = sm.ols(y,x1).fit() model.pvalues #Backward Elimination cols = list(x.columns) pmax = 1 while (len(cols)>0): p= [] X_1 = X[cols] X_1 = sm.add_constant(x_1) model = sm.ols(y,x_1).fit() p = pd.series(model.pvalues.values[1:],index = cols) pmax = max(p) feature_with_p_max = p.idxmax() if(pmax>0.05): cols.remove(feature_with_p_max) else: break selected_features_be = cols print(selected_features_be) def stepwise_selection(x, y, initial_list=[], threshold_in=0.1, threshold_out = 0.1, verbose=true): included = list(initial_list) while True: changed=false # forward step excluded = list(set(x.columns)-set(included)) new_pval = pd.series(index=excluded) for new_column in excluded: model = sm.ols(y, sm.add_constant(pd.dataframe(x[included+[new_column]]))).fit() new_pval[new_column] = model.pvalues[new_column] best_pval = new_pval.min() if best_pval < threshold_in: best_feature = new_pval.argmin() included.append(best_feature) changed=true if verbose: print('add {:30} with p-value {:.6}'.format(best_feature, best_pval)) # backward step model = sm.ols(y, sm.add_constant(pd.dataframe(x[included]))).fit() # use all coefs except intercept pvalues = model.pvalues.iloc[1:] worst_pval = pvalues.max() # null if pvalues is empty if worst_pval > threshold_out: changed=true worst_feature = pvalues.argmax() included.remove(worst_feature) if verbose: print('drop {:30} with p-value {:.6}'.format(worst_feature, worst_pval)) if not changed: break return included result = stepwise_selection(x, y) print(result) 93