728x90
반응형
2025.03.10 - [Daily Data Log] - [Day 5] 머신러닝을 활용한 프리미어리그 선수 경기당 득점 예측
📌 개요
지난 포스팅에서는 선형 회귀(Linear Regression)와 랜덤 포레스트(Random Forest) 모델을 활용하여 프리미어리그 선수들의 경기당 득점(Goals per 90)을 예측하는 머신러닝 모델을 개발했습니다. 이번 포스팅에서는 모델 성능을 최적화하는 다양한 방법을 실습해보겠습니다.
1️⃣ 모델 최적화란?
머신러닝 모델 최적화는 모델이 더욱 정확하게 예측할 수 있도록 조정하는 과정입니다. 대표적인 최적화 방법은 다음과 같습니다.
🔹 최적화 기법
- 하이퍼파라미터 튜닝(Hyperparameter Tuning): 모델의 성능을 조정하는 매개변수를 최적화
- 피처 엔지니어링(Feature Engineering): 중요한 변수를 추가하거나 변환하여 모델의 입력 데이터 개선
- 데이터 스케일링(Data Scaling): 데이터를 표준화 또는 정규화하여 모델 성능 향상
- 교차 검증(Cross Validation): 모델이 과적합되지 않도록 데이터 분할하여 학습
2️⃣ 랜덤 포레스트 하이퍼파라미터 튜닝
랜덤 포레스트의 성능을 개선하기 위해 GridSearchCV를 사용하여 최적의 하이퍼파라미터를 찾겠습니다.
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestRegressor
# 모델과 파라미터 그리드 설정
param_grid = {
'n_estimators': [100, 200, 300],
'max_depth': [None, 10, 20, 30],
'min_samples_split': [2, 5, 10]
}
rf_model = RandomForestRegressor(random_state=42)
grid_search = GridSearchCV(rf_model, param_grid, cv=5, scoring='neg_mean_squared_error', n_jobs=-1)
grid_search.fit(X_train, y_train)
# 최적의 하이퍼파라미터 출력
print("Best Parameters:", grid_search.best_params_)
📌 결과 예시:
Best Parameters: {'max_depth': 20, 'min_samples_split': 5, 'n_estimators': 200}
✅ 코멘트:
- max_depth: 트리의 최대 깊이를 제한하여 과적합 방지
- min_samples_split: 노드를 분할하는 최소 샘플 수 조정
- n_estimators: 트리 개수를 조정하여 모델 성능 최적화
3️⃣ 피처 엔지니어링 (Feature Engineering)
머신러닝 모델의 예측력을 향상시키기 위해 새로운 변수를 추가하거나 기존 변수를 변환할 수 있습니다.
🔹 새로운 변수 추가
# 경기당 슈팅 수(Shots per Match) 변수 추가
df['Shots per Match'] = df['Shots'] / df['Matches Played']
# 어시스트 대비 골 비율(Goals per Assist) 추가
df['Goals per Assist'] = df['Goals'] / (df['Assists'] + 1)
✅ 코멘트:
- 슈팅을 많이 시도하는 선수들은 득점 확률이 높을 가능성이 있음
- 어시스트가 많은 선수일수록 득점 기회도 많을 가능성이 있음
4️⃣ 데이터 스케일링 (Data Scaling)
각 변수의 단위를 맞추기 위해 표준화(Standardization) 또는 **정규화(Normalization)**를 적용할 수 있습니다.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
✅ 코멘트:
- 표준화는 평균이 0, 표준편차가 1이 되도록 조정하여 모델이 변수 간 차이를 학습할 수 있도록 도와줌
- 정규화는 모든 값을 0~1 사이로 조정하여 스케일 차이를 줄임
5️⃣ 교차 검증을 통한 모델 평가
교차 검증은 데이터를 여러 개의 폴드(fold)로 나누어 모델이 다양한 데이터 분할에서 얼마나 안정적으로 학습하는지를 평가하는 방법입니다.
from sklearn.model_selection import cross_val_score
rf_model_tuned = RandomForestRegressor(n_estimators=200, max_depth=20, min_samples_split=5, random_state=42)
scores = cross_val_score(rf_model_tuned, X_train, y_train, cv=5, scoring='neg_mean_squared_error')
print("Cross-Validation RMSE:", np.sqrt(-scores.mean()))
📌 결과 예시:
Cross-Validation RMSE: 0.065
✅ 코멘트:
- 교차 검증을 통해 모델이 데이터에 과적합되지 않는지 확인할 수 있음
- 여러 번 테스트하여 모델의 일관된 성능을 평가할 수 있음
📌 마무리
이번 포스팅에서는 프리미어리그 경기 성과 예측 모델을 최적화하는 다양한 방법을 다뤘습니다.
- 랜덤 포레스트 모델의 하이퍼파라미터 튜닝을 수행하여 최적의 설정을 찾았습니다.
- 피처 엔지니어링을 통해 새로운 변수(Shots per Match, Goals per Assist)를 추가하여 성능을 개선했습니다.
- 데이터 스케일링과 교차 검증을 적용하여 모델의 일반화 성능을 향상시켰습니다.
다음 포스팅에서는 XGBoost 및 LightGBM을 활용한 고급 모델 학습을 진행하겠습니다! 🚀
728x90
반응형
'Daily Data Log' 카테고리의 다른 글
| [Day 8] AutoML을 활용한 프리미어리그 경기 성과 예측 자동화 (0) | 2025.03.13 |
|---|---|
| [Day 7] XGBoost & LightGBM을 활용한 프리미어리그 경기 성과 예측 (0) | 2025.03.12 |
| [Day 5] 머신러닝을 활용한 프리미어리그 선수 경기당 득점 예측 (1) | 2025.03.10 |
| [Day 4] 탐색적 데이터 분석(EDA) 실습 프로젝트 - 24/25 PL 선수 통계 (0) | 2025.03.09 |
| [Day 3] Matplotlib & Seaborn을 활용한 데이터 시각화 (0) | 2025.03.08 |