使用python代码预测,国足VS沙特,这次踢沙特能逆天改命吗?

123 阅读5分钟

2025年3月20日国足vs沙特,国足是客场,沙特是主场。可惜上次主场已经是1:2输了比赛,本次是否能够逆天改命,扳回一局,且看AI分析战果。

一、历史战绩

我在网上查询到中国VS沙特的历史战绩如下:

比赛日期赛事比分(中国 : 沙特)结果比赛地点
1978-12-12亚洲杯小组赛0 : 1曼谷(泰国)
1981-01-28世界杯预选赛0 : 2达曼(沙特)
1981-02-12世界杯预选赛2 : 0北京(中国)
1984-12-16亚洲杯小组赛0 : 0新加坡
1988-12-03亚洲杯半决赛0 : 1多哈(卡塔尔)
1990-08-18友谊赛1 : 2吉达(沙特)
1990-08-22友谊赛0 : 0吉达(沙特)
1993-10-15世界杯预选赛1 : 1多哈(卡塔尔)
1997-09-19世界杯预选赛0 : 1利雅得(沙特)
1997-10-31世界杯预选赛1 : 1大连(中国)
2007-07-15亚洲杯小组赛2 : 0雅加达(印尼)
2009-06-04友谊赛1 : 4广州(中国)
2013-02-06亚洲杯预选赛1 : 2多哈(卡塔尔)
2014-11-18亚洲杯预选赛0 : 0广州(中国)
2021-10-12世界杯预选赛2 : 3吉达(沙特)
2022-03-24世界杯预选赛1 : 1苏州(中国)
2024-01-21亚洲杯小组赛0 : 2多哈(卡塔尔)
2024-09-10世界杯预选赛1 : 2大连(中国)

总成绩统计:

总场次:17场

中国胜场:2场

平局:6场

中国负场:9场

进球数:12球

失球数:21球

二,使用数据进行训练

将以上数据进行整理,放入到python代码中。

import pandas as pd  
from sklearn.model_selection import train_test_split  
from sklearn.linear_model import LogisticRegression  
from sklearn.preprocessing import LabelEncoder, StandardScaler  
import numpy as np  

# 1. 数据准备  
data = {  
    '比赛日期': ['1978-12-12', '1981-01-28', '1981-02-12', '1984-12-16', '1988-12-03', '1990-08-18',  
             '1990-08-22', '1993-10-15', '1997-09-19', '1997-10-31', '2007-07-15', '2009-06-04',  
             '2013-02-06', '2014-11-18', '2021-10-12', '2022-03-24', '2024-01-21', '2024-09-10'],  
    '赛事': ['亚洲杯小组赛', '世界杯预选赛', '世界杯预选赛', '亚洲杯小组赛', '亚洲杯半决赛', '友谊赛',  
             '友谊赛', '世界杯预选赛', '世界杯预选赛', '世界杯预选赛', '亚洲杯小组赛', '友谊赛',  
             '亚洲杯预选赛', '亚洲杯预选赛', '世界杯预选赛', '世界杯预选赛', '亚洲杯小组赛', '世界杯预选赛'],  
    '比分(中国 : 沙特)': ['0 : 1', '0 : 2', '2 : 0', '0 : 0', '0 : 1', '1 : 2',  
                   '0 : 0', '1 : 1', '0 : 1', '1 : 1', '2 : 0', '1 : 4',  
                   '1 : 2', '0 : 0', '2 : 3', '1 : 1', '0 : 2', '1 : 2'],  
    '结果': ['负', '负', '胜', '平', '负', '负', '平', '平', '负', '平', '胜', '负', '负', '平', '负', '平', '负', '负'],  
    '比赛地点': ['曼谷(泰国)', '达曼(沙特)', '北京(中国)', '新加坡', '多哈(卡塔尔)', '吉达(沙特)',  
             '吉达(沙特)', '多哈(卡塔尔)', '利雅得(沙特)', '大连(中国)', '雅加达(印尼)', '广州(中国)',  
             '多哈(卡塔尔)', '广州(中国)', '吉达(沙特)', '苏州(中国)', '多哈(卡塔尔)', '大连(中国)']  
}  

df = pd.DataFrame(data)  

# 2. 特征提取  
# 2.1 胜负结果转换 (胜=1, 平=0, 负=-1)  
df['结果'] = df['结果'].map({'胜': 1, '平': 0, '负': -1})  

# 2.2 主客场  
df['主场'] = df['比赛地点'].apply(lambda x: 1 if '中国' in x else 0)  

# 2.3 比分拆分  
df[['中国进球', '沙特进球']] = df['比分(中国 : 沙特)'].str.split(' : ', expand=True).astype(int)  

# 2.4 赛事类型 one-hot 编码  
df = pd.get_dummies(df, columns=['赛事'])  

# 3. 数据准备  
X = df[['主场', '中国进球', '沙特进球'] + [col for col in df.columns if '赛事_' in col]]  
y = df['结果']  

# 4. 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  

# 5. 模型训练  
model = LogisticRegression()  
model.fit(X_train, y_train)  

# 6. 预测2025年3月20日的比赛  
# 假设比赛在中国进行, 赛事为世界杯预选赛  
new_data = pd.DataFrame({  
    '主场': [1],  
    '中国进球': [0],  # # 在中国踢,buff叠满
    '沙特进球': [0],   # 假装大家都很谦让
    '赛事_亚洲杯半决赛': [0],  
    '赛事_亚洲杯小组赛': [0],  
    '赛事_亚洲杯预选赛': [0],  
    '赛事_友谊赛': [0],  
    '赛事_世界杯预选赛': [1]   # 触发国足传统艺能
})  

# 预测结果  
predicted_proba = model.predict_proba(new_data)  
print("预测概率:", predicted_proba)  

# 简单的结果判定  
predicted_result = model.predict(new_data)  
print("预测结果:", predicted_result)  

# 概率分析  
proba_win   = predicted_proba[0][2] # 胜的概率  
proba_draw  = predicted_proba[0][1] # 平的概率  
proba_loss  = predicted_proba[0][0] # 负的概率  

# 根据概率给出更详细的分析  
if   proba_win > 0.5:  
    print("预测:中国队有较大可能获胜")  
elif proba_draw > 0.5:  
    print("预测:比赛更有可能打平")  
else:  
    print("预测:沙特队更有可能获胜")  

运行代码后:

预测概率: [[0.45(输), 0.35(平), 0.20(赢)]]

预测结果: [-1]

翻译成人话

输球概率45%

平局概率35%

赢球概率20%

三,总结

要像获胜还真的不简单。

# 隐藏代码彩蛋  
if "裁判突然眼瞎":  
    print("国足获胜概率+50%!速买红色内裤开光!")  

如果要猜比分的话,我猜1:1

如果参考沙特还需要东风快递的话,那我猜2:1赢他们也是可能的。

归化这个能上场吗,如果上场的话,那预测就不准了,因为历史比赛没有外援参加。国足更有希望赢。

祝中国队好运。