了解什么是走地数据?
走地数据分析,在足球赛事的上下文中,是一种针对正在进行中的比赛进行实时数据分析的方法。这种方法主要用于预测比赛中的某些结果或趋势,如总进球数、比分变化、球队表现等。
在足球走地数据分析中,大小球策略是一种非常实用的投注方式。它主要预测的是一场比赛中的总进球数是否超过或低于一个预设的数值。例如,如果盘口设置为“2.5球”,那么投注“大球”意味着预测比赛的总进球数将至少为3个,而投注“小球”则意味着预测比赛的总进球数将少于或等于2个1。
之前研究过一款软件,是根据预设条件来推断比赛的结果,效果也还可以,但是入门比较高,适合资深的足球专家,有自己的一套分析思路,也是功能很强大的一款产品。
软件地址:http://lcsjfx.com/web/zqds.html
后面就想着,弄否把这个数据模型化,通过现在比较流行的AI模型去预测,效果也还可以。
下面是大概的实战流程,感兴趣可以看看。
该篇章主要讲的是以python为基础,其他技术暂时不在这里延申。
说明 | 技术 |
---|---|
数据采集 | request 库 |
数据清理 | pandas 库 |
模型训练 | pycaret 库 |
第一步:数据采集
这里采集的是国外比较权威的足球赛事,因为比较简单,所有没用爬虫框架,直接用request.get(),就能把数据采集下来的,这里需要获取过去5年的历史数据作为训练数据。
import requests
url = 'https://kto/lib/api/v1/overview/sport/1/live'
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
"Content-Type": "application/json",
"Accept": "application/json",
"path": '/kto/lib/api/v1/overview/sport/1/live'
}
response = requests.get(url=url, headers=headers)
if response.status_code == 200:
response.encoding = 'utf-8'
content = response.content.decode('utf-8')
print(content)
# 处理数据
if response.status_code != 200:
print('---sbCorner获取结果异常---', response.status_code)
第二步:数据清洗
获取的数据包含很多无用字段,比如比赛ID,比赛时间,比赛队名等等,这些对模型没有任何意义的数据,比如清理掉。
# 用pandas进行数据处理
df_filtered = df_filtered.drop(columns=['match_id','match_date','league_id','home_id','away_id', 'zjq_res'])
查看清理后的数据
原则上这里用一下数据归一化会好一点,但是我们可以先直接把数据拿去训练看一下效果
大小球计算公式:主队比分-客队比分>盘口,及全大0,反之则全小1
# 导入pycaret分类模块和初始化设置
from pycaret.classification import *
# 初始化设置
# data: 数据集,包含特征和目标变量
# target: 目标变量的名称
# session_id: 用于重现实验结果的随机种子
s = setup(df_filtered, target='sfp_res', session_id=123)
# 比较基准模型
# 使用compare_models()函数比较不同的基准模型,并返回最佳模型
best = compare_models()
看模型返回最优的是GBC模型,但是预测率不高,还需要对数据进行进一步清洗
# 缺失值补充 简单补充
imputation_type = 'simple',
# 数值型变量补充缺失策略
numeric_imputation = 'mean', # drop,mean,median,mode,knn,int or float
# 类别型变量补充缺失策略
categorical_imputation = 'mode', # drop,mode,str
)
清洗之后再拿数据去模型比较
评分那么高,肯定有猫腻,检查发现,没有数据里面还有很多null的数据
继续清理数据
# 缺失值补充 迭代补充
imputation_type = 'iterative',
# 迭代次数
iterative_imputation_iters 5, # 当simple时忽略
# 数值型迭代策略
numeric_iterative_imputer = 'lightgbm',
# 如果 =None,则用LGBClassifier,当simple时忽略
拿数据预测一下,看起来还行,但是还是有点小问题,正常那么高分就无敌了,里面的数据实时数据有些是拿不到的,所以还需要再处理一下。
这里只是简单的用pycaret进行模型训练,实际应用中,比这个场景肯定复杂很多,
里面还涉及到球队的评分、elo、rang等,这些这里就不赘述了,有兴趣可以交流一下,后续有空再分享一下。
一个基于大模型为基础的数据分析平台,有兴趣可以自行了解。
http://lcsjfx.com/web/sjfxpt.html