본문 바로가기

Artificial Intelligence/Machine Learning

[Machine Learning] 캐글 경마 데이터 선형회귀 분석

728x90

경마 데이터를 이용하여 성별과 몸무게로 승점을 예측하는 선형 회귀 모델을 알아보겠다. 데이터는 다음의 링크에서 다운로드할 수 있다. kaggle korea horse racing

 

import pandas as pd
from sklearn import linear_model
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import accuracy_score

 

위의 코드는 선형 회귀 분석에 필요한 라이브러르를 불러오는 것이다.

 

df = pd.read_csv('./2014_s.csv', encoding='euc-kr')
df.tail()

          ID RCTRCK     RACE_DE PRDCTN_NATION_NM SEX  AGE  BND_WT TRNER  \
27213  27214     제주  2014-11-29                한   거  NaN    56.0   강대은   
27214  27215     제주  2014-11-29                한   거  NaN    55.5   박병진   
27215  27216     제주  2014-11-29                한   거  NaN    52.5   김영래   
27216  27217     제주  2014-11-29                한   거  NaN    53.0   강대은   
27217  27218     제주  2014-11-29                한   거  NaN    57.5   박병진   

      RCHOSE_OWNR_NM  RCHOSE_BDWGH  
27213            김영구           300  
27214            고경수           300  
27215           광명종합           333  
27216            김기준           281  
27217            강상우           314 

 

위의 코드는 링크를 통해 가져온 csv 데이터를 읽어오는 코드이다. 해당 데이터는 euc-kr 방식으로 encoding 설정해주어야 정상적으로 정보를 가져올 수 있다.

 

def get_sex(sex):
    number = 0
    if sex == '암': number = 2
    elif sex == '수': number = 1
    return number

df['NUMBER_SEX'] = df['SEX'].apply(lambda x : get_sex(x))

 

위의 데이터는 sex column의 값을 str에서 int로 바꿔주는 과정이다. 0 = 거세. 1 = 수컷, 2 = 암컷이다. get_sex 함수를 통해 "NUMBER_SEX"에 값을 넣어준다.

 

df_x = df[['NUMBER_SEX', 'RCHOSE_BDWGH']]
df_y = df[['BND_WT']]

 

위의 코드는 독립 변수와 종속 변수를 나눠주는 것이다. df_x는 독립 변수(원인), df_y는 종속 변수(결과)이다.

 

X_train, X_test, y_train, y_test = train_test_split(df_x, df_y, test_size=0.3, random_state=121)

 

위의 코드는 평가 데이터와 예측 데이터를 나눠주는 것이다. test_size = 0.3은 전체 데이터의 30%를 예측 데이터로 설정해주겠다는 뜻이다. random_state는 평가 데이터와 예측 데이터를 섞어주는 시드 값이다.

 

model = linear_model.LinearRegression()
model.fit(X_train, y_train)

 

위의 코드는 선형 회귀 모델을 만들고, 학습 데이터로 모델을 학습시켜주는 것이다.

 

lr_pred = model.predict(X_test)
mae = mean_absolute_error(y_test, lr_pred)

 

위의 코드에서 첫째 줄은 학습된 모델에 평가 데이터를 넣어주어 예측된 결과를 lr_pred에 저장해주는 것이고, 두 번째 줄은 mae 방식으로 실제 정답 데이터와 lr_pred의 오차를 비교한 값을 저장해주는 것이다.

 

print(round(mae, 2))

1.3

 

지금까지 만든 선형 회귀 모델의 오차값을 출력하면 1.3이 나온다.

728x90