第五章:足球模型的标签怎么设计?胜平负、总进球、比分和半全场
足球预测模型实战

第五章:足球模型的标签怎么设计?胜平负、总进球、比分和半全场

标签决定模型到底学什么。胜平负、总进球、比分、半全场属于不同预测目标,不能混在一起训练。

2026-05-16浏览 2
正文:17px

很多人训练足球模型时,会先想算法:

用 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/AA/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. 标签规则是否可复现、可追踪?

这些问题回答清楚,才适合进入正式训练。


本章小结

足球模型训练前,必须先设计标签。

标签决定模型到底在学什么。

胜平负标签回答:

主胜、平局、客胜分别是什么概率?

总进球标签回答:

这场比赛最终会落在哪个进球区间?

比分标签回答:

不同比分组合分别有多大概率?

半全场标签回答:

半场和全场结果会如何组合?

这些不是同一个问题。

不能混在一起训练,也不能用同一套评估方式粗暴判断。

标签越细,信息越多,但样本越稀疏。

标签越粗,训练越稳定,但表达能力有限。

所以,足球模型标签设计要从稳定目标开始:

先做胜平负概率;
再做总进球分布;
再做泊松比分矩阵;
最后再扩展半全场和更复杂目标。

下一章我们进入泊松模型:

泊松模型怎么预测总进球和比分?从预期进球到比分概率矩阵。

本文仅供足球数据研究和模型训练学习参考,不构成任何投注建议。