프로젝트에서는 머신러닝에 앞서 PCC와 Regression analysis등의 통계분석을 통해 머신러닝에 넣어줄 변수를 선정하기로 하였습니다.
PCC와 VIF를 통해 변수를 1차적으로 선택하고 선택한 변수들로 Regression analysis를 수행하여 p-value값을 기준으로 유의한 변수를 선정합니다.
PCC
종속변수는 전세가인 JS_Price로 하고 독립변수들과의 PCC를 계산하였습니다.
독립변수 중 범주형 데이터가 존재하여 처음에는 원핫인코딩을 진행하였다가 독립변수의 수가 너무 많아져 타겟인코딩으로 대체하여 독립변수를 인코딩 해주었습니다.
# 결과를 저장할 DataFrame 생성
result_df = pd.DataFrame(columns=['Column_Name', 'PCC', 'p-value'])
# 'JS_Price'와 다른 열 간의 PCC 및 p-value 계산 및 저장
for column in df.columns:
if column != 'JS_Price':
if df[column].dtype != object:
correlation, p_value = pearsonr(df['JS_Price'], df[column])
result_df = result_df.append({'Column_Name': column, 'PCC': correlation, 'p-value': p_value}, ignore_index=True)
result_df.sort_values(by='PCC', ascending=False).reset_index(drop=True)
PCC결과는 아래와 같았고, 유의확률을 0.01로 하여 p-value가 0.01을 초과하는 변수를 1차적으로 제거하였습니다.
VIF
데이터에 대해 standard scaling을 적용한 후 PCC결과가 반영된 독립변수와 JS_Price를 종속변수로 하여 `sm.OLS(Y, X).fit()` 회귀모델을 생성하였습니다.
독립변수들간의 다중공선성을 배제하기 위해 VIF를 계산하여 VIF값이 10보다 큰 변수를 2차적으로 제거하였습니다.
Regression analysis
PCC와 VIF의 결과가 반영된 독립변수를 토대로 회귀모델을 생성하고 p-value값이 0.01보다 큰 변수를 제거하여 최종적으로 머신러닝에 입력할 독립변수를 정하였습니다.
최종 선택 변수는 ['Sell_Price', 'UR', 'Population', 'JS_BA', 'SDT_index', 'Building_Use_y', 'Region_Name_y', 'Shortest_Distance_to_School', 'Building_Age', 'Crime_Rates', 'longitude']로 정해졌습니다.
잔차분석
선형 회귀분석이기 때문에 선형성, 정규성, 등분산성, 독립성을 만족하는지 확인하기 위해 잔차분석을 시행해줍니다.
선형성
예측값을 x축으로 잔차를 y축으로 두고 그래프를 그린 결과 극단값의 영향이 있지만 대부분의 예측값에서 선형성을 만족한다고 판단한다.
정규성
Q-Q플롯에서 점들이 점선을 크게 벗어나고 p-value값이 0으로 0.05보다 작으므로 정규성을 만족하지 않는다고 판단한다.