很多人训练足球模型时,会先想算法:
用 LightGBM 还是逻辑回归?
做分类还是回归?
要不要加泊松分布?
要不要多模型融合?
参数怎么调?
特征怎么选?
这些问题都重要。
但在算法之前,还有一个更基础的问题:
你的标签是什么?
也就是:
模型到底要学习什么答案?
这件事如果没想清楚,后面所有训练都会混乱。
因为足球比赛可以有很多种“答案”。
同一场比赛:
主队 2-1 客队
如果你做胜平负模型,它的标签是:
主胜
如果你做总进球模型,它的标签是:
3球
如果你做比分模型,它的标签是:
2-1
如果你做半全场模型,要看半场比分。
假设半场是:
主队 0-1 客队
全场是:
主队 2-1 客队
那半全场标签就是:
客胜/主胜
你看,同一场比赛,可以生成多个不同标签。
它们都来自同一个比赛结果,但它们不是同一个模型任务。
胜平负、总进球、比分、半全场,各自的难度、样本分布、训练方式、评估方式都不一样。
所以,足球模型训练前,必须先把标签设计讲清楚。
否则,你很容易训练出一个看似能跑、实际目标混乱的模型。
一、什么是标签?
在机器学习里,训练样本通常由两部分组成:
x = 模型输入特征
y = 模型要学习的答案
在足球模型中:
x = 比赛开始前可以知道的信息
y = 比赛结束后根据结果生成的标签
比如一场比赛:
主队:A队
客队:B队
全场比分:2-1
半场比分:0-1
赛前特征可能包括:
双方强弱差距
近期进球
近期失球
主客场表现
赛程间隔
联赛环境
球队状态
这些是 x。
比赛结束后,我们可以生成不同的 y。
胜平负标签:
主胜
总进球标签:
3球
比分标签:
2-1
半全场标签:
客胜/主胜
所以,标签就是模型要学习的目标。
你给模型什么标签,它就学什么任务。
如果标签设计错了,模型再强也没用。
二、标签设计为什么比算法更靠前?
因为算法只是在学习标签和特征之间的关系。
如果你的标签本身不清楚,算法就不知道要优化什么。
比如你说:
我要训练一个足球预测模型。
这句话太宽。
模型预测什么?
预测主胜?
预测平局?
预测客胜?
预测总进球?
预测比分?
预测半场结果?
预测半全场?
预测主队进球数?
预测客队进球数?
预测比赛是否低比分?
预测比赛是否属于风险较高场次?
每一个目标都需要不同标签。
标签不同,模型就不同。
例如:
胜平负是三分类任务。
主队是否不败是二分类任务。
总进球可以是多分类任务,也可以是回归或分布任务。
比分可以来自泊松分布,也可以做多分类,但多分类会非常稀疏。
半全场是 9 分类任务,比胜平负更难。
所以,标签设计决定:
模型类型;
损失函数;
样本分布;
评估指标;
回测方式;
产品输出方式。
不要先问用什么算法。
先问:
我到底要模型学习哪一种比赛结果。
三、标签必须来自赛后结果,但特征必须来自赛前信息
这一点要特别清楚。
标签当然是赛后才知道的。
比如:
主胜、平局、客胜;
总进球;
比分;
半场结果;
半全场组合。
这些都必须在比赛结束后生成。
但模型输入特征不能使用赛后信息。
这两个边界不要混。
正确逻辑是:
赛前数据 -> 生成特征 x
赛后结果 -> 生成标签 y
模型学习 x 和 y 的关系
错误逻辑是:
赛后数据 -> 混入特征 x
模型学习到未来答案
比如你要预测胜平负。
可以用比赛结束后的比分生成标签:
2-1 -> 主胜
但不能把这场比赛的射门、控球率、角球、赛后 xG 放进输入特征。
因为这些赛前不知道。
标签可以来自赛后。
特征必须停留在赛前。
这是训练足球模型的基本边界。
四、胜平负标签:最基础,但并不简单
胜平负是最常见的足球预测目标。
标签通常有三类:
H = Home Win = 主胜
D = Draw = 平局
A = Away Win = 客胜
根据全场比分生成:
if HomeGoals > AwayGoals => H
if HomeGoals = AwayGoals => D
if HomeGoals < AwayGoals => A
示例:
2-0 => H
1-1 => D
0-2 => A
3-2 => H
0-0 => D
胜平负看起来简单,但它有几个难点。
第一,平局不是少数异常。
足球比赛平局比例不低,很多联赛平局率可能在 20%-30% 左右。
第二,胜平负不是二分类。
主胜、平局、客胜三者同时存在,模型必须学完整分布。
第三,主胜最高概率不代表低风险。
例如:
主胜 45%
平局 30%
客胜 25%
主胜是最高概率,但不胜概率有 55%。
如果模型只输出主胜,就会丢失重要信息。
所以胜平负模型最好输出概率:
P(H), P(D), P(A)
并且满足:
P(H) + P(D) + P(A) = 1
五、胜平负模型不要只做硬分类
很多人训练胜平负模型,会让模型直接预测:
H / D / A
然后看命中率。
这不是最佳方式。
更合理的做法是让模型输出三个概率。
比如:
P(H) = 0.52
P(D) = 0.28
P(A) = 0.20
模型最终硬分类可以是:
H
但真正有价值的是概率分布。
为什么?
因为下面两场比赛,硬分类都可能是主胜。
第一场:
P(H) = 0.42
P(D) = 0.31
P(A) = 0.27
第二场:
P(H) = 0.75
P(D) = 0.16
P(A) = 0.09
如果只看硬分类,都是主胜。
但第一场非常分散,第二场非常集中。
这两场不能用同样方式理解。
所以胜平负标签虽然是 H/D/A,但模型输出必须保留概率。
这是专业足球模型和普通结果猜测的差别。
六、胜平负标签的类别分布问题
胜平负三类不是平均分布。
在很多联赛里,主胜比例通常高于客胜,平局有稳定比例。
例如某个联赛历史可能大致是:
主胜:45%
平局:27%
客胜:28%
不同联赛会有差异。
有些联赛主场优势明显,主胜更高。
有些联赛平局较多。
有些联赛强弱差距大,强队胜率更高。
有些联赛客队反击效率高,客胜比例不低。
这意味着,模型训练时要关注类别分布。
如果模型什么都不学,只是一直偏向主胜,也可能拿到一个看起来不低的命中率。
比如主胜比例 45%,模型永远预测主胜,也可能有 45% 命中率。
但这样的模型没有价值。
所以评估胜平负模型时,不能只看总命中率。
还要看:
主胜概率是否校准;
平局是否被系统性低估;
客胜是否被模型忽略;
不同联赛类别分布是否不同;
强弱差距不同的比赛里,概率是否合理变化。
平局尤其重要。
很多模型会低估平局,因为平局特征难学。
这会导致模型在胜平负上看似不错,但概率分布不可信。
七、主队不败、客队不败这类二分类标签怎么理解?
除了三分类胜平负,也可以设计二分类标签。
比如:
主队是否不败:
HomeNotLose = 1 if H or D
HomeNotLose = 0 if A
客队是否不败:
AwayNotLose = 1 if D or A
AwayNotLose = 0 if H
主队是否获胜:
HomeWin = 1 if H
HomeWin = 0 if D or A
是否平局:
Draw = 1 if D
Draw = 0 if H or A
二分类模型有好处。
它比三分类更简单。
比如逻辑回归很适合做二分类概率。
但二分类也有问题。
如果你训练“主队是否不败”,它把主胜和平局合并了。
这会丢失信息。
主胜和平局的比赛结构并不一样。
所以二分类模型更适合做辅助模型,而不是完全替代胜平负模型。
例如:
三分类模型输出完整分布;
二分类模型辅助判断主队不败概率;
平局模型专门观察平局风险。
多个目标可以一起存在,但要知道每个目标解决什么问题。
八、总进球标签:可以做分类,也可以做分布
总进球是另一类重要目标。
总进球定义:
TotalGoals = HomeGoals + AwayGoals
例如:
0-0 => 0球
1-0 => 1球
1-1 => 2球
2-1 => 3球
3-1 => 4球
总进球标签可以有多种设计。
第一种:精确总进球数
标签是:
0, 1, 2, 3, 4, 5...
问题是,高进球数量样本很少。
比如 6 球、7 球、8 球很少见。
如果直接做多分类,会导致类别稀疏。
第二种:分桶
更常见的是分桶:
0球
1球
2球
3球
4球及以上
或者:
0-1球
2-3球
4球及以上
分桶可以减少稀疏问题。
例如稳狗足球里如果强调 2/3 球区间,就可以把总进球分布做成更适合产品理解的区间。
但要注意,分桶方式会改变模型目标。
0/1/2/3/4+ 更细。
0-1/2-3/4+ 更粗。
越细,信息更多,但训练更难。
越粗,训练更稳,但信息损失更大。
标签设计要根据产品目标决定。
九、总进球二分类标签要谨慎
很多模型会做类似二分类:
TotalGoals >= 3
TotalGoals < 3
或者:
TotalGoals > 2.5
TotalGoals <= 2.5
从纯机器学习角度,这是二分类。
标签可以写成:
HighGoals = 1 if TotalGoals >= 3
HighGoals = 0 if TotalGoals <= 2
这种标签训练简单,适合逻辑回归和 LightGBM。
但它有一个问题:
它把 0球、1球、2球都合并成一类,把 3球、4球、5球都合并成另一类。
这样会损失分布信息。
例如:
0-0
1-1
2-0
都属于 2 球及以下,但比赛结构可能不同。
再比如:
2-1
3-2
5-0
都属于 3 球及以上,但差异很大。
所以,总进球二分类可以作为一个辅助模型,但如果你要做更细的总进球分析,最好保留总进球分布。
也就是模型输出:
P(0球), P(1球), P(2球), P(3球), P(4球+)
而不是只输出一个高低判断。
十、为什么 2球、3球经常很关键?
在足球比赛里,总进球经常集中在 2 球和 3 球附近。
当然,不同联赛不同。
但总体上,足球是低比分运动。
0球、1球、2球、3球、4球以上分布不会均匀。
很多比赛最终落在:
1-1
2-0
2-1
1-2
这些比分附近。
它们对应总进球 2 或 3。
所以,总进球模型不能只关心“高”或“低”。
如果产品层面需要解释比赛进球结构,2/3 球区间非常重要。
比如模型输出:
P(0-1球) = 26%
P(2-3球) = 49%
P(4球+) = 25%
这说明比赛最可能集中在中间进球区间。
这类输出比简单说“进球偏多”更有信息量。
它能帮助用户理解:
这场不是极低比分,也不是明显大开大合,而是更可能落在常见区间。
总进球标签设计要能支持这种表达。
十一、比分标签:最直观,但最难训练
很多用户最想看比分。
但从建模角度,比分是最难的目标之一。
原因很简单:
比分类别太多,且每个类别样本少。
常见比分包括:
0-0
1-0
0-1
1-1
2-0
0-2
2-1
1-2
2-2
3-0
0-3
3-1
1-3
3-2
2-3
还有很多不常见比分。
如果把每个比分当成一个类别,模型会遇到样本稀疏问题。
比如 4-3 这种比分很少,模型很难学习稳定规律。
所以,专业系统一般不建议一开始直接训练一个“比分多分类模型”。
更常见的方式是:
先估计主队进球分布;
再估计客队进球分布;
然后组合成比分概率矩阵。
这就是泊松模型适合比分建模的原因。
它不是直接猜 2-1,而是计算:
P(主队进2球) × P(客队进1球)
在独立假设下:
P(2-1) = P(HomeGoals = 2) × P(AwayGoals = 1)
当然,主客队进球不完全独立,这是泊松模型的局限。
但作为基础比分分布,它比直接硬分类更稳。
十二、比分标签仍然有价值
虽然直接训练比分困难,但比分标签仍然有价值。
它可以用于:
生成总进球标签;
生成胜平负标签;
评估泊松比分矩阵;
分析常见比分分布;
复盘模型是否高估某类比分;
生成产品层面的比分概率展示。
比如模型预测某场常见比分概率:
1-0:12%
1-1:11%
2-0:10%
2-1:9%
0-0:8%
这并不表示模型确定比分是 1-0。
它只是说这些比分相对更集中。
比分概率适合解释比赛结构。
比如:
1-0、2-0 概率高,说明模型认为主队小胜概率较高。
1-1、0-0 概率高,说明平局和低比分风险明显。
2-1、1-2、2-2 上升,说明双方进球概率都不低。
所以比分标签不要被理解成“猜比分”。
它应该被理解成比分分布。
十三、半全场标签:最复杂,因为它预测过程
半全场标签比胜平负更难。
它需要同时看半场结果和全场结果。
半场结果三类:
H = 主队半场领先
D = 半场平
A = 客队半场领先
全场结果三类:
H = 主胜
D = 平局
A = 客胜
组合后 9 类:
H/H
H/D
H/A
D/H
D/D
D/A
A/H
A/D
A/A
例如:
半场 0-0,全场 2-1:
D/H
半场 1-0,全场 1-1:
H/D
半场 0-1,全场 2-1:
A/H
半全场难在哪里?
它不仅要预测最终强弱,还要预测比赛过程。
有些强队慢热,半场经常平,全场再赢。
有些球队开局强,但后程下降。
有些弱队能守上半场,但下半场崩。
有些联赛上半场进球少,后程更开放。
有些赛制让球队前期更谨慎。
这些都是过程特征。
如果你没有足够好的半场数据和过程特征,半全场模型会很难稳定。
所以,半全场不建议作为初版模型核心。
它更适合在胜平负、总进球、比分分布比较成熟后再扩展。
十四、标签粒度越细,样本越稀疏
这是标签设计的一个基本规律。
标签越粗,训练越稳定,但信息少。
标签越细,信息多,但训练更难。
例如:
胜平负
3 类:
H / D / A
类别少,样本相对充足。
总进球分桶
比如 5 类:
0 / 1 / 2 / 3 / 4+
比胜平负更细,但还能训练。
比分
几十个类别。
很多类别样本很少。
半全场
9 类。
有些组合很少,比如 H/A 或 A/H。
样本稀疏会导致模型不稳定。
比如某个标签只出现几十次,模型很难学习可靠规律。
所以标签设计必须平衡:
信息量;
样本量;
稳定性;
产品用途。
不要为了显得细致,一上来就预测非常稀疏的标签。
十五、标签设计要服务产品输出
模型不是孤立训练。
它最终要服务产品。
所以标签设计要考虑产品层面到底要展示什么。
如果产品要展示胜平负概率,就必须有胜平负模型。
如果产品要展示总进球分布,就必须有总进球模型或泊松分布。
如果产品要展示比分概率,就必须有比分矩阵。
如果产品要展示半全场分析,就必须有半场和全场过程标签。
但不要为了产品看起来丰富,就硬做所有模型。
如果某个标签模型不稳定,宁可不展示,也不要输出不可信概率。
足球预测系统最重要的是可信。
不是功能越多越好。
例如:
初版产品可以先输出:
胜平负概率;
总进球分布;
常见比分概率;
模型置信度或风险等级。
等数据积累和验证足够后,再加入半全场或更多复杂目标。
十六、标签设计要避免把不同任务混在一起
有些人会把标签混用。
比如训练一个模型,既希望它预测胜平负,又希望它预测总进球,还希望它预测比分。
这会导致目标混乱。
除非你明确做多任务学习,否则初期不要这样做。
更清晰的方式是:
一个模型负责一个主要目标。
例如:
胜平负模型:
输入赛前特征
输出 P(H), P(D), P(A)
总进球模型:
输入赛前特征
输出 P(0球), P(1球), P(2球), P(3球), P(4球+)
泊松比分模型:
输入预期进球
输出比分概率矩阵
半全场模型:
输入赛前特征和过程相关特征
输出 9 类半全场概率
这样结构更清楚,也更容易评估。
如果一个模型任务不清楚,后续评估也会不清楚。
十七、标签质量比标签数量重要
有些人想让系统看起来强,于是设计很多标签。
比如:
主胜;
客胜;
平局;
大比分;
小比分;
1-0;
2-1;
半全场;
首球;
角球;
红牌;
等等。
但如果数据质量不够,标签越多,噪音越多。
比如红牌标签。
红牌是非常稀疏事件。
如果没有大量样本和高质量过程数据,模型很难稳定预测红牌。
再比如首球。
需要准确的进球时间和比赛事件数据。
如果数据源不稳定,训练结果很容易失真。
所以标签设计要从最核心、最稳定的目标开始。
足球模型的基础目标通常是:
胜平负
总进球
比分分布
这三类做好,已经能支持很多分析。
其他标签应该逐步扩展。
十八、标签生成必须可重复
标签生成规则必须稳定。
同一场比赛,无论什么时候重新跑训练流程,都应该生成同样标签。
例如胜平负标签:
HomeGoals > AwayGoals => H
HomeGoals = AwayGoals => D
HomeGoals < AwayGoals => A
这个规则很稳定。
总进球标签:
TotalGoals = HomeGoals + AwayGoals
也稳定。
总进球分桶规则也要固定。
例如:
0球 => bucket_0
1球 => bucket_1
2球 => bucket_2
3球 => bucket_3
4球及以上 => bucket_4plus
不要今天用:
0,1,2,3,4+
明天又改成:
0-1,2-3,4+
如果标签规则变化,模型评估就不能直接比较。
所以标签定义要版本化。
这不需要在文章里公开内部实现,但原则必须讲:
标签规则一旦进入训练体系,就要稳定、可复现、可追踪。
十九、标签生成要处理异常比赛
不是所有比赛结果都适合生成标签。
比如:
比赛取消;
比赛延期但未补赛;
比赛中断;
比赛判定结果;
数据缺失;
半场比分缺失;
加时赛是否计入;
点球大战是否计入。
这些要先定义清楚。
通常情况下:
胜平负、总进球、比分标签使用常规比赛最终比分。
如果比赛包含加时或点球大战,必须确认你的业务定义。
例如杯赛淘汰赛:
90 分钟 1-1;
加时 2-1;
点球大战主队胜。
这场比赛的胜平负标签到底是什么?
如果你的模型预测的是 90 分钟结果,标签应该是平局。
如果你的模型预测的是晋级结果,标签才可能是主队晋级。
这两个任务完全不同。
所以,标签设计必须明确比赛结果口径。
对于初版模型,建议先以常规时间结果为主,保持口径稳定。
复杂赛制后续单独处理。
二十、标签和评估指标必须对应
标签决定评估指标。
如果你训练胜平负概率,就不能只看主胜命中率。
应该看:
整体多分类 LogLoss;
Brier Score;
概率校准;
三类分别表现;
平局是否被低估;
不同概率区间表现。
如果你训练总进球分布,就要看:
总进球分类准确率;
LogLoss;
Brier Score;
各进球桶校准;
是否高估 4球以上;
是否低估 0-1球。
如果你训练比分概率,就要看:
常见比分概率是否合理;
比分分布是否过度集中;
总进球汇总是否合理;
胜平负汇总是否和胜平负模型冲突。
标签和指标不匹配,评估就会失真。
例如,你训练输出概率,却只用硬命中率评估,很多信息会丢失。
所以设计标签时,就要同时想清楚:
这个标签后面怎么评估。
二十一、标签设计的推荐路线
如果从零开始做足球模型,我建议按这个顺序:
第一阶段:胜平负概率
先做三分类。
目标清晰,标签稳定,样本相对充足。
输出:
P(H), P(D), P(A)
第二阶段:总进球分布
做总进球分桶。
例如:
0球、1球、2球、3球、4球及以上
或者:
0-1球、2-3球、4球及以上
根据产品需求选择。
第三阶段:泊松比分矩阵
估计主客队预期进球,生成比分概率。
用于解释:
常见比分;
胜平负汇总;
总进球汇总;
比分结构。
第四阶段:半全场或过程型标签
在数据质量足够、半场数据稳定后再做。
不要一开始就做太细。
这样路线更稳。
二十二、一个虚拟例子:同一场比赛生成多个标签
假设一场比赛:
主队:A队
客队:B队
半场比分:0-1
全场比分:2-1
可以生成:
胜平负标签
HomeGoals = 2
AwayGoals = 1
2 > 1 => H
标签:
H
总进球标签
TotalGoals = 2 + 1 = 3
如果用精确总进球:
3
如果用分桶:
3球
如果用粗分桶:
2-3球
比分标签
2-1
半场结果
HalfTimeHomeGoals = 0
HalfTimeAwayGoals = 1
0 < 1 => A
半场标签:
A
半全场标签
全场是主胜 H。
所以:
A/H
你看,同一场比赛可以生成多个标签。
但每个标签对应不同模型任务。
不能混为一谈。
二十三、标签设计最常见错误
第一,目标不清。
嘴上说预测比赛,实际不知道预测胜平负还是总进球。
第二,标签太细。
一开始就做精确比分或半全场,导致样本稀疏。
第三,标签口径不统一。
有时用 90 分钟,有时用加时后,有时混入点球大战。
第四,分桶规则频繁变化。
导致模型版本之间无法比较。
第五,把标签相关字段误放进特征。
比如用赛后进球、赛后射门预测当前比赛。
第六,只看硬分类命中率。
忽略概率质量和校准。
第七,忽略平局类别。
模型总是偏向胜负,平局概率长期失真。
第八,多个任务混在一个模型里,没有明确多任务设计。
这些错误会让模型训练从一开始就不稳定。
二十四、本章实操检查清单
开始训练前,先检查:
1. 当前模型预测目标是否明确?
2. 标签是胜平负、总进球、比分,还是半全场?
3. 标签生成规则是否固定?
4. 是否明确使用常规时间结果,还是包含加时/点球?
5. 总进球是否需要分桶?分桶规则是什么?
6. 比分标签是否会导致样本稀疏?
7. 半全场标签是否有足够样本支持?
8. 特征中是否混入了标签相关的赛后信息?
9. 模型输出是概率,还是硬分类?
10. 评估指标是否和标签类型匹配?
11. 平局是否被单独建模和评估?
12. 标签规则是否可复现、可追踪?
这些问题回答清楚,才适合进入正式训练。
本章小结
足球模型训练前,必须先设计标签。
标签决定模型到底在学什么。
胜平负标签回答:
主胜、平局、客胜分别是什么概率?
总进球标签回答:
这场比赛最终会落在哪个进球区间?
比分标签回答:
不同比分组合分别有多大概率?
半全场标签回答:
半场和全场结果会如何组合?
这些不是同一个问题。
不能混在一起训练,也不能用同一套评估方式粗暴判断。
标签越细,信息越多,但样本越稀疏。
标签越粗,训练越稳定,但表达能力有限。
所以,足球模型标签设计要从稳定目标开始:
先做胜平负概率;
再做总进球分布;
再做泊松比分矩阵;
最后再扩展半全场和更复杂目标。
下一章我们进入泊松模型:
泊松模型怎么预测总进球和比分?从预期进球到比分概率矩阵。
本文仅供足球数据研究和模型训练学习参考,不构成任何投注建议。
