サッカーの試合結果 scikit-learn

サッカーの試合結果

サッカーの試合結果を予測する問題を考えてみましょう。

ここでは、チームの過去の試合データを用いて、2つのチームの対戦結果を予測する回帰問題としてアプローチします。

Scikit-learnのLinearRegressionを使用して線形回帰モデルを作成し、試合の得点差を予測します。

サンプルデータとして、2つのチームの過去の対戦データを用意し、それを使ってモデルを構築します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# ダミーデータ: 過去の対戦データ
# (チーム1の得点, チーム2の得点, チーム1が勝利したかどうか(1:勝利, 0:引き分け・敗北))
data = np.array([
[1, 3, 0],
[2, 2, 0],
[3, 1, 1],
[4, 0, 1],
[0, 0, 0],
[1, 1, 0],
[2, 0, 1],
[0, 3, 0],
[1, 2, 0],
[2, 2, 0],
])

# 訓練データとテストデータに分割
X = data[:, :2] # チーム1とチーム2の得点
y = data[:, 2] # 勝利フラグ

# 線形回帰モデルの作成と学習
model = LinearRegression()
model.fit(X, y)

# テストデータの予測
X_test = np.array([[3, 2], [1, 0]])
y_pred = model.predict(X_test)

print("予測結果:", y_pred)

# 予測結果のグラフ化
plt.figure(figsize=(8, 4))
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='coolwarm', edgecolors='k', marker='o', s=100)
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, cmap='coolwarm', edgecolors='k', marker='x', s=100)
plt.xlabel('Team 1 Score')
plt.ylabel('Team 2 Score')
plt.title('Soccer Match Prediction')
plt.colorbar(label='Prediction')
plt.grid(True)
plt.show()

この例では、過去の対戦データからチーム1とチーム2の得点を使って、勝利したかどうかを予測しています。

テストデータとして、[3, 2]と[1, 0]の2試合の得点が与えられており、それぞれの試合の結果を予測しています。

結果をプロットすると、チームの得点が高いほど勝利しやすい傾向が見られることがわかります。

[実行結果]

注意: このサンプルデータはダミーデータであり、実際のデータには多くの要素が影響します。

実際の予測には多くの特徴量(例えば、選手の実力、試合場所、天候など)を考慮に入れる必要があります。

ソースコード解説

このコードは、線形回帰モデルを使用してサッカーの試合結果を予測する簡単な例を示しています。

詳細を以下に説明します:

1. import文:

必要なライブラリをインポートしています。
numpyは数値計算ライブラリ、matplotlib.pyplotはグラフ描画ライブラリ、sklearn.linear_model.LinearRegressionはScikit-learnの線形回帰モデルを意味します。

2. data:

ダミーデータを定義しています。
dataは10行3列の行列で、各行がサッカーの試合の情報を示しています。
1列目と2列目は、それぞれチーム1とチーム2の得点を表し、3列目はチーム1が勝利したかどうかを示すフラグ(1: 勝利、0: 引き分け・敗北)です。

3. Xy:

Xは訓練データで、チーム1とチーム2の得点を格納しています。
yは目的変数で、チーム1の勝利フラグを格納しています。

4. model:

線形回帰モデルを作成します。
LinearRegression()で線形回帰オブジェクトを作成し、modelに代入します。

5. model.fit(X, y):

Xyを使って線形回帰モデルを学習させます。
これにより、訓練データを元にモデルのパラメータ(重みと切片)が最適化されます。

6. X_testy_pred:

テストデータであるX_testに対して、学習済みのモデルで予測を行います。
model.predict(X_test)で予測値を取得し、y_predに代入します。

7. plt.scatter:

Xyの散布図と、テストデータX_testと予測値y_predの散布図を描画します。
各チームの得点をx軸とy軸にプロットし、c引数でyy_predの値に応じて色を変え、勝利フラグによって点の形状を変えています。

8. plt.xlabel, plt.ylabel, plt.title:

x軸、y軸、タイトルのラベルを設定します。

9. plt.colorbar:

予測値の色に対応するカラーバーを表示します。

10. plt.grid:

グリッドを表示します。

11. plt.show():

グラフを表示します。

このコードでは、ダミーデータを使って線形回帰モデルを学習させ、チーム1とチーム2の得点から勝利フラグを予測する例を示しています。

実際のデータに応じて、特徴量や目的変数を適切に設定して、より高度な予測モデルを構築することができます。