728x90
반응형
dacon 축구선수 유망 여부 예측 예제를 따라해보았다.
데이터 다운로드를 위해 대회에도 등록
https://dacon.io/competitions/official/236031/overview/description
목적
본 프로젝트에서는 16~21세의 축구 선수 데이터를 기반으로 유망성을 예측하는 모델을 만들게 됩니다. 특히 상관관계 분석을 학습하고 모델에 적용해 봐요. 다양한 방법으로 데이터를 확인하고, 분석 목적에 맞춰 모델을 학습시키는 방법을 익히며 데이터 분석 과정을 경험하게 되실 거예요!
데이터의 칼럼은 다음과 같습니다.
66개의 칼럼(column)이 존재하므로 그 중에서 일부 칼럼만을 살펴보겠습니다.
- ID : 해당 데이터에서의 고유한 ID
선수의 고유 신체 스펙
- Age : 나이
- Height : 신장(cm)
- Weight : 몸무게(kg)
선수 정보 : 프로필
- Position : 선수의 포지션
- PreferredFoot : 선수가 선호하는 발(왼발/오른발)
- AttackingWorkRate : 공격적 플레이에 대한 선호도
- DefensiveWorkRate : 수비적 플레이에 대한 선호도
선수 정보 : 57개의 신체 스펙 칼럼 중 일부
- PaceTotal : 속력 및 가속력 종합
- ShootingTotal : 선수의 슈팅 능력
- PassingTotal : 선수의 전체적인 패스 능력
- Composure : 침착함에 대한 점수
예측해야하는 값(TARGET)
- Prospect : 선수의 유망 여부(0/1)
# 데이터 정보
train.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3019 entries, 0 to 3018
Data columns (total 66 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 ID 3019 non-null object
1 Age 3019 non-null int64
2 Height 3019 non-null int64
3 Weight 3019 non-null int64
4 Position 3019 non-null object
5 PreferredFoot 3019 non-null object
6 AttackingWorkRate 3019 non-null object
7 DefensiveWorkRate 3019 non-null object
8 PaceTotal 3019 non-null float64
9 ShootingTotal 3019 non-null float64
10 PassingTotal 3019 non-null float64
11 DribblingTotal 3019 non-null float64
12 DefendingTotal 3019 non-null float64
13 PhysicalityTotal 3019 non-null float64
14 Crossing 3019 non-null float64
15 Finishing 3019 non-null float64
16 HeadingAccuracy 3019 non-null float64
17 ShortPassing 3019 non-null float64
18 Volleys 3019 non-null float64
19 Dribbling 3019 non-null float64
20 Curve 3019 non-null float64
21 FKAccuracy 3019 non-null float64
22 LongPassing 3019 non-null float64
23 BallControl 3019 non-null float64
24 Acceleration 3019 non-null float64
25 SprintSpeed 3019 non-null float64
26 Agility 3019 non-null float64
27 Reactions 3019 non-null float64
28 Balance 3019 non-null float64
29 ShotPower 3019 non-null float64
30 Jumping 3019 non-null float64
31 Stamina 3019 non-null float64
32 Strength 3019 non-null float64
33 LongShots 3019 non-null float64
34 Aggression 3019 non-null float64
35 Interceptions 3019 non-null float64
36 Positioning 3019 non-null float64
37 Vision 3019 non-null float64
38 Penalties 3019 non-null float64
39 Composure 3019 non-null float64
40 Marking 3019 non-null float64
41 StandingTackle 3019 non-null float64
42 SlidingTackle 3019 non-null float64
43 GKDiving 3019 non-null float64
44 GKHandling 3019 non-null float64
45 GKKicking 3019 non-null float64
46 GKPositioning 3019 non-null float64
47 GKReflexes 3019 non-null float64
48 STRating 3019 non-null float64
49 LWRating 3019 non-null float64
50 LFRating 3019 non-null float64
51 CFRating 3019 non-null float64
52 RFRating 3019 non-null float64
53 RWRating 3019 non-null float64
54 CAMRating 3019 non-null float64
55 LMRating 3019 non-null float64
56 CMRating 3019 non-null float64
57 RMRating 3019 non-null float64
58 LWBRating 3019 non-null float64
59 CDMRating 3019 non-null float64
60 RWBRating 3019 non-null float64
61 LBRating 3019 non-null float64
62 CBRating 3019 non-null float64
63 RBRating 3019 non-null float64
64 GKRating 3019 non-null float64
65 Prospect 3019 non-null int64
dtypes: float64(57), int64(4), object(5)
모델 생성
다음과 같이 로지스틱 회귀 모델(sklearn.linear_model.LogisticRegression)을 생성해보는 튜토리얼이다.
# 1.pandas를 이용해 csv 파일 읽어오기
import pandas as pd
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
submission = pd.read_csv('sample_submission.csv')
# 2. 범주형 변수 제거
not_numeric = ['ID', 'Position', 'PreferredFoot', 'AttackingWorkRate', 'DefensiveWorkRate']
train_transfered = train.drop(not_numeric, axis = 1)
test_transfered = test.drop(not_numeric, axis = 1)
# 3.train 데이터프레임에서 Prospect과의 상관관계가 높은 상위 7개 피처 추출
abs_corr = abs(train_transfered.corr()['Prospect'])
abs_corr_sort = abs_corr.sort_values(ascending=False)[1:8]
col_names = abs_corr_sort.index
col_names
# 4. x_train / y_train 추출
x_train = train_transfered[col_names]
y_train = train_transfered['Prospect']
# 5. 학습/검증 세트 분리
from sklearn.model_selection import train_test_split
train_x, val_x, train_y, val_y = train_test_split(x_train, y_train, test_size=0.2, random_state=42)
# 6. LogisticRegression(로지스틱 회귀) 모델 학습
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(max_iter=5000)
model.fit(train_x, train_y)
# 7. 로지스틱 회귀 모델의 검증 데이터에 대한 Micro F1 Score 평가
from sklearn.metrics import f1_score
val_pred = model.predict(val_x)
score = f1_score(val_y, val_pred, average='micro')
print('Micro F1 Score: ',score)
# 8. 로지스틱 회귀 모델을 사용하여 test 데이터셋에 대해 예측 수행#
test_x = test_transfered[col_names]
y_pred = model.predict(test_x)
y_pred
# 9. 예측 결과를 submission 데이터프레임에 추가
submission['Prospect'] = y_pred
submission.head()
# 10. submission 파일 저장하기
submission.to_csv('submission.csv', index=False)
반응형
'AI,머신러닝 > AI,ML 연습' 카테고리의 다른 글
(dacon) 농산물 가격 예측 (시계열 분석) (4) | 2023.12.05 |
---|---|
(kaggle) titanic (0) | 2023.07.26 |