Allen's 데이터 맛집

[머신러닝] 회귀 : 대학원 입학 예측 본문

Project/Kaggle 분석&기계학습

[머신러닝] 회귀 : 대학원 입학 예측

Allen93 2023. 10. 1. 22:36

대학원 입학 예측(회귀)

데이터를 가지고 대학원에 입학할 확률을 구해보겠습니다.

 

  • 예측할 값(target): "Chance of Admit "
  • 평가: r2
  • data(3개): t2-2-X_train, t2-2-y_train, t2-2-X_test
  • 제출 형식(Serial No.-> id, 예측 값 -> target)
id, target
28,0.741696
76,0.779616
151,0.897247

 


데이터 불러오기

 

각각 데이터를 불러옵니다.

import pandas as pd
# 데이터 불러오기
X_train = pd.read_csv("../input/big-data-analytics-certification/t2-2-X_train.csv")
y_train = pd.read_csv("../input/big-data-analytics-certification/t2-2-y_train.csv")
X_test = pd.read_csv("../input/big-data-analytics-certification/t2-2-X_test.csv")

 

EDA

 

요약 데이터, 타입, 결측치와 기초통계를 통해 데이터를 파악합니다.

# 데이터 확인
X_train.head(3)
X_test.head(3)
y_train.head(3)

# 타입 확인
X_train.info()

# 결측치 확인
print(X_train.isnull().sum())
print(X_test.isnull().sum())

# 기초 통계
X_train.describe()

 

타겟 데이터의 분포도를 위해 막대그래프, 그리고 상관관계를 시각화로 파악하기 위해 히트맵을 그려봅니다.

그리고 X_train, y_train과 병합하여 데이터를 비교해 보고 corr()을 사용하여 'Chance of Admit' 열과 다른 모든 열간의 상관관계를 출력해 봅니다.

# 타겟 확인 
y_train["Chance of Admit "].hist()

# 상관관계 
import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(8, 8))
sns.heatmap(X_train.corr(), annot=True)
plt.show()

train = X_train.join(y_train.set_index("Serial No."), on="Serial No.")
train.head(3)

train[train.columns[1:]].corr()["Chance of Admit "].sort_values(ascending=False)

 

 

모델 학습 및 평가

LinearRegression, RandomForestRegressor, LinearRegression 회귀 모델들을 사용하여  각각 r2 score를 출력합니다.

# 선형회귀 모델
from sklearn.linear_model import LinearRegression
lr = LinearRegression()

from sklearn.model_selection import cross_val_score
scores = cross_val_score(lr, X_train.iloc[:,1:] , y_train["Chance of Admit "] , scoring='r2', cv=5)
print(scores)
print(scores.mean())
#0.7793443258102183

>>> [0.68755618 0.77275276 0.78523589 0.80534171 0.84583509]
0.7793443258102183

 

# 랜덤포레스트
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(random_state=2022)

scores = cross_val_score(rf, X_train.iloc[:,1:] , y_train["Chance of Admit "] , scoring='r2', cv=5)
print(scores)
print(scores.mean())
# 0.735532640585703

>>> [0.64869265 0.73684678 0.74006195 0.77770429 0.77435753]
0.735532640585703

 

# 선형회귀 모델
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train.iloc[:,1:], y_train["Chance of Admit "])
pred = model.predict(X_test.iloc[:,1:])
pred

>>> array([0.74169551, 0.77961555, 0.89724685, 0.62178957, 0.52329688,
       0.79905929, 0.5533676 , 0.53842986, 0.53349439, 0.81605173,
       0.6184423 , 0.86062093, 0.44377896, 0.65915476, 0.44378392,
       0.77344472, 0.91707277, 0.94723587, 0.99500994, 0.62889498,
       0.73713179, 0.71177513, 0.77303894, 0.83329803, 0.69294529,
       0.63183488, 0.90280343, 0.64011081, 0.97622107, 0.66122198,
       0.75819948, 0.52358472, 0.66289347, 0.78847735, 0.68487084,
       0.96045066, 0.59755096, 0.64267599, 0.93231842, 0.70104901,
       0.65487186, 0.79000375, 0.69886094, 0.67133938, 0.83247237,
       0.76054207, 0.50555231, 0.7312788 , 0.85142943, 0.84877528,
       0.53721188, 0.85891425, 0.94861598, 0.72704391, 0.77370375,
       0.63392911, 0.58372317, 0.59631484, 0.80653472, 0.8850056 ,
       0.83377169, 0.65649764, 0.69555057, 0.70981663, 0.60819004,
       0.68285873, 0.6771213 , 0.92522669, 0.67304201, 0.8797406 ,
       0.6558163 , 0.68267974, 0.78149038, 0.92229331, 0.88397378,
       0.70807094, 0.90657563, 0.93510992, 0.85559716, 0.75021205])

 

 

예측 결과 제출 양식에 맞게 idtarget으로 이뤄진 데이터프레임을 만듭니다.

pd.DataFrame({'id': X_test['Serial No.'], 'target': pred}).to_csv('003000000.csv', index=False)

pd.read_csv("003000000.csv")

예측 결과