CREAD框架:用分类-恢复范式解决视频观看时长预测难题

📅 2026/8/10 4:25:59
CREAD框架:用分类-恢复范式解决视频观看时长预测难题
1. 从“看多久”到“看不看”视频推荐中观看时长预测的范式转变在视频推荐系统的核心指标里用户“看多久”一直是个让人又爱又恨的难题。爱它是因为它直接关联着用户粘性、内容价值和平台收益一个能准确预测用户观看时长的模型理论上能让推荐更精准、更“上头”。恨它是因为这个目标本身充满了不确定性——用户的注意力是流动的中途退出可能因为一个电话、一条消息或者仅仅是内容的一个小低谷。传统的回归方法比如直接预测一个连续的时长数值常常被数据中的极端长尾分布大量短观看和少量超长观看和噪声搞得焦头烂额模型容易对异常值过度敏感预测稳定性差。最近读了一篇挺有意思的论文标题是《CREAD: A Classification-Restoration Framework with Error Adaptive Discretization for Watch Time Prediction in Video Recommender Systems》。这个CREAD框架提出了一种全新的思路我们不直接硬啃“预测具体分钟数”这块硬骨头而是把它拆解成两个更可控的步骤。简单来说就是先判断用户“会不会看”分类再根据判断的“信心”来精细化估计“大概看多久”恢复。这种“分类-恢复”的范式加上其核心的“误差自适应离散化”机制为解决观看时长预测的顽疾提供了一个非常巧妙的工程视角。我自己在构建类似预估模型时也深受回归模型方差过大、校准困难的困扰CREAD这种将连续问题离散化、再智能重建的思路感觉像是一下子打开了一扇新窗户。它不仅是一个算法框架更是一种处理复杂、噪声大、分布不均衡的连续值预测问题的通用方法论特别适合推荐、广告、金融等领域的从业者深入琢磨。2. CREAD框架总览为何要“先分类后恢复”在深入细节之前我们得先理解CREAD框架的基本骨架和设计哲学。它的全称“Classification-Restoration framework with Error Adaptive Discretization”已经自述了三大核心部件分类Classification、恢复Restoration和误差自适应离散化Error Adaptive Discretization。整个流程可以概括为首先将连续的观看时长通过一种智能的、非均匀的方式离散化成若干个区间桶变成一个多分类问题然后训练一个分类模型来预测样本属于每个区间的概率最后利用分类模型输出的概率分布通过一个恢复模块重建出连续的观看时长预测值。2.1 传统回归方法的瓶颈与分类范式的优势为什么非要绕个弯子不直接回归呢这得从实际业务数据的特性说起。以视频观看时长为例其分布通常呈现严重的正偏态右偏。绝大多数观看行为集中在很短的区间比如几秒到几分钟但存在少数长达数小时甚至更久的观看。直接使用MSE均方误差或MAE平均绝对误差作为损失函数模型会倾向于“讨好”那些数量占多数的短时长样本而对长尾的长时长样本预测能力很弱。更糟糕的是一个极端的长尾样本比如一次意外的3小时观看会产生巨大的损失从而过度影响模型参数的更新导致模型整体不稳定。分类范式则巧妙地规避了这个问题。它将一个困难的回归任务转化为一个相对更容易优化的分类任务。离散化之后模型的目标不再是精确到一个具体的数值而是判断“时长最可能落在哪个范围区间内”。这样做有几个直接的好处缓解极端值影响无论实际时长是100秒还是10000秒只要它们被划分到合适的、可能较宽的区间内就不会因为绝对数值的巨大差异而产生破坏性的损失。更易于模型学习深度神经网络通常更擅长学习类别间的决策边界而不是精确的数值映射。分类任务中的交叉熵损失函数对概率分布的优化更为平滑和稳定。提供不确定性信息分类模型输出的是一组概率分布这本身就包含了预测的不确定性信息。例如如果模型对“1-3分钟”和“3-10分钟”两个区间的预测概率都很高且接近那么我们可以知道模型对这个样本的时长估计是比较不确定的这个信息在后续的排序或决策中非常有价值。2.2 CREAD的三阶段工作流CREAD框架的工作流可以清晰地分为三个阶段下图展示了其核心数据处理与模型预测的完整链路flowchart TD A[“原始连续观看时长数据br长尾、噪声大”] -- B[“误差自适应离散化模块brEAD”] subgraph B [误差自适应离散化模块] B1[“利用一个基准回归模型br如简单线性模型进行初步预测”] -- B2[“计算每个样本的预测残差误差”] B2 -- B3[“根据残差分布进行聚类分析br如K-Means”] B3 -- B4[“确定非均匀的离散化区间边界”] end B -- C[“离散化后的类别标签br如区间 1, 区间 2, … 区间 K”] C -- D[“分类模型训练br输入用户/视频特征br输出K个区间的概率分布”] D -- E[“恢复模块br输入分类模型输出的概率分布”] subgraph E [恢复模块] E1[“方案A加权求和br概率 × 区间代表值如中位数”] E2[“方案B分布匹配br拟合连续分布如对数正态”] end E -- F[“最终连续的观看时长预测值”]第一阶段离散化Discretization这是整个框架的基石。CREAD没有采用简单的等宽或等频分桶而是提出了“误差自适应离散化”。其核心思想是离散化的区间边界不应该由原始时长的分布单独决定而应该考虑一个简单回归模型的预测误差残差分布。具体做法是先用一个简单的基准模型比如线性回归对时长做初步预测然后分析预测误差的分布。在误差大的区域即模型难以预测准的区域我们需要划分更细、更多的区间让后续的分类模型能在这里进行更精细的区分在误差小的区域则可以划分得粗一些。这样形成的离散化方案是“非均匀”的是一种数据驱动、任务自适应的分桶策略能更高效地利用模型容量。第二阶段分类Classification一旦获得了离散化的类别标签我们就可以构建一个标准的分类模型如DeepFM、DIN等深度网络。模型的输入是丰富的用户和视频特征输出是一个K维向量代表样本属于K个时长区间的概率。这一步训练的目标是最小化预测概率分布与真实类别标签之间的交叉熵损失。由于变成了分类问题我们可以方便地应用各种针对分类任务的技巧如处理类别不平衡的Focal Loss、标签平滑等。第三阶段恢复Restoration分类模型输出了概率分布但我们最终需要的还是一个连续的数值。恢复模块的任务就是将这个概率分布“翻译”回一个具体的时长预测值。最简单的方法是加权求和预测时长 Σ (第i个区间的概率 * 第i个区间的代表值)代表值可以取区间的中位数。更精细的方法可以假设时长在区间内服从某种分布如均匀分布或截断分布然后用概率去拟合这个分布从而得到更平滑的预测。恢复模块是轻量级的不参与训练只在推理时使用。3. 误差自适应离散化EAD让分桶策略“智能”起来误差自适应离散化是CREAD框架的灵魂也是它区别于普通分类方法的关键。理解EAD就能理解CREAD为何有效。它的目标不是找到一个“最好看”的时长分桶而是找到一个“最有利于后续分类模型学习”的分桶方案。3.1 EAD的核心步骤与实现细节EAD的实施可以分为以下几个具体步骤我结合自己的理解补充了一些工程实现中需要注意的细节训练一个基准回归模型模型选择论文中使用的是简单的线性回归。在实践中选择什么模型作为基准很重要。原则是“简单且快速”。因为它的目的不是追求极致精度而是为了快速获得一个对数据模式有基本拟合能力的预测器从而计算误差。逻辑回归、浅层决策树如XGBoost with very shallow depth都是不错的选择。切忌使用复杂的深度模型那会本末倒置且可能引入过拟合干扰误差分布的真实性。特征工程基准模型使用的特征可以和最终分类模型一致也可以先用一套核心特征如用户历史平均观看时长、视频类别、视频热度等。目的是用最小的成本获得一个有意义的预测。计算预测残差用基准模型在训练集上进行预测对于每个样本i计算残差e_i y_i - ŷ_i其中y_i是真实观看时长ŷ_i是基准模型预测值。关键点这里需要对时长做必要的预处理。由于时长是正数且长尾通常先进行对数变换log(1 y)让分布更接近正态这样回归模型的训练会更稳定残差也更有解释性。计算残差也是在变换后的空间进行的。基于残差分布进行聚类这是EAD最核心的一步。我们不是直接对时长y聚类而是对由(ŷ_i, e_i)构成的点进行聚类。ŷ_i是预测值可以看作“基准认知”e_i是认知偏差。聚类算法如K-Means会将预测值和误差模式相似的样本聚在一起。聚类的意义同一个簇内的样本意味着基准模型对它们的预测能力和误差模式是相似的。例如一个簇可能包含所有“被基准模型严重低估的长视频”另一个簇可能包含“被基准模型高估的短视频”。这样簇的边界天然地定义了数据中“难易程度”不同的区域。确定簇数K这是一个超参数。可以通过肘部法则Elbow Method或轮廓系数Silhouette Score来辅助选择。也可以根据业务经验比如希望最终有多少个时长档位如5档或10档。论文中通常实验确定。从簇到离散化区间完成聚类后每个样本都有一个簇标签。然后我们在每个簇内部对真实的观看时长y或变换后的值进行排序。对于目标为K个最终类别的任务我们需要在每个簇内产生若干分位点将簇内的时长进一步细分。一种策略是根据簇内样本数量占总体的比例来分配子区间数量。大簇多分小簇少分。最终所有簇的子区间合并起来就形成了K个非均匀的、覆盖整个时长范围的离散化区间。最终输出每个样本根据其真实时长y落入哪个最终的区间获得一个类别标签label ∈ {1, 2, ..., K}。注意EAD过程通常只在训练集上进行。我们需要保存最终确定的离散化区间边界cut points。在验证集和测试集上我们直接应用这些边界来为样本分配标签而不是重新运行EAD。这样才能保证数据划分的一致性。3.2 与等宽/等频分桶的直观对比为了更直观地理解EAD的优势我们将其与两种传统分桶方法进行对比分桶方法核心思想优点缺点在观看时长预测中的问题等宽分桶将时长范围[min, max]均匀分成K段。简单直观区间宽度一致。完全忽略数据分布。长尾数据下绝大多数样本挤在前几个桶后面桶几乎为空。分类模型无法学习有效的特征因为标签极度不平衡且长尾区域的样本没有区分度。等频分桶按样本数量均匀分桶每个桶内样本数大致相等。解决了类别不平衡问题。桶的边界值可能没有业务意义如一个桶是[3s, 15s]下一个是[15s, 2min]。在预测误差较大的区域如中等时长可能因为样本数量多而被划分得过粗不利于模型精细化学习。误差自适应离散化根据基准模型预测误差分布进行非均匀分桶。数据驱动在模型难预测的区域划分更细。任务自适应分桶策略服务于最终预测目标。实现相对复杂需要训练基准模型和聚类。需要额外计算但通常是一次性开销换来的是分类模型更优的学习效率和最终效果。从对比可以看出EAD是一种“智能”的分桶。它像一个经验丰富的老师知道学生模型在哪些知识点数据区域容易出错就在那些地方多安排一些练习题细分区间帮助学生重点突破。4. 分类与恢复模块的设计与实战要点在获得了高质量的离散标签后我们就进入了模型构建的核心阶段分类与恢复。这部分虽然听起来标准但在CREAD框架的语境下有一些特定的设计和实战技巧。4.1 分类模型的结构与特征工程分类模型的选择非常灵活可以是你业务中任何表现良好的深度推荐模型如DeepFM、DCN、DIN、DIEN等。模型结构本身不是CREAD的创新点关键在于如何针对“观看时长区间分类”这个任务进行适配。输入特征需要充分利用用户和视频的两方面信息。用户侧用户ID嵌入、历史行为序列观看、点赞、收藏的视频ID序列、人口统计学特征如果可用、用户长期兴趣标签、实时上下文时间、设备、网络。视频侧视频ID嵌入、标题/描述文本的嵌入、封面图的多模态特征、类别标签、创作者信息、视频质量指标分辨率、码率、实时热度近期播放量、互动率。交叉特征用户-视频匹配度特征至关重要。例如用户历史兴趣标签与视频标签的余弦相似度、用户常看类别与该视频类别的重合度等。这些特征能直接反映“用户可能对这个视频有多感兴趣”。输出层与损失函数输出层是一个K维的全连接层接Softmax激活输出一个概率分布P [p1, p2, ..., pK]。损失函数使用标准的分类交叉熵损失L_cls -log(p_label)其中label是样本的真实离散标签。处理类别不平衡尽管EAD在一定程度上缓解了不平衡但可能仍然存在。可以采用Focal Loss来动态调整损失权重让模型更关注难分类的样本通常是那些处于区间边界附近的样本。Focal Loss的公式为FL -α_t * (1 - p_t)^γ * log(p_t)其中p_t是模型对真实类别的预测概率α_t是类别权重γ是调节因子用于降低易分类样本的损失贡献。4.2 恢复模块从概率回到数值分类模型训练好后在线上服务时我们需要将输出的概率分布转换回一个标量的观看时长预测值。这就是恢复模块的工作。这里有几个实用的方案区间中位数加权法最常用这是最简单直接的方法。预先计算好每个离散区间[l_i, r_i)的代表值通常取中位数m_i (l_i r_i) / 2。在原始时长空间而非对数空间计算。预测时计算加权和ŷ Σ (p_i * m_i)。优点计算简单无需额外参数线上推理速度快。缺点假设每个区间内的时长均匀分布可能与实际不符。对于宽区间中位数可能代表性不强。条件期望法更精确假设我们知道在每个区间内时长的条件概率分布f(y | labeli)。那么预测时长为ŷ Σ [ p_i * E(y | labeli) ]其中E(y | labeli)是该区间内时长的期望值。如何估计E(y | labeli)可以在训练集上对每个区间内的样本计算其真实时长的平均值作为期望的估计。这个方法比中位数法更准确地反映了区间内的数据分布。实战技巧为了防止过拟合可以对每个区间的期望值进行平滑处理比如使用全体的全局平均值进行贝叶斯平滑。分布拟合法最复杂但最灵活这种方法不再将区间视为孤立的而是假设整个观看时长服从一个参数化的连续分布例如对数正态分布。因为对数正态分布非常适合描述这种正值、右偏的数据。分类模型输出的概率分布P可以被视为这个连续分布在各个离散区间上的概率质量。恢复模块的任务是找到一个对数正态分布的参数均值μ和方差σ²使得该分布在各区间上的积分值最接近模型输出的概率P。这可以通过最小化交叉熵或KL散度来实现。找到最优参数后预测时长可以直接取该分布的期望值exp(μ σ²/2)。优点预测非常平滑且能给出预测的不确定性分布的方差。缺点实现复杂需要额外的优化步骤线上推理开销稍大。个人经验在大多数业务场景中区间中位数加权法或条件期望法已经足够好且易于上线和维护。分布拟合法更适合对预测精度和不确定性估计有极高要求的场景如某些金融风险预估。建议先从简单方法开始作为基线。4.3 一个完整的训练与推理流程示例假设我们使用DeepFM作为分类模型采用条件期望法进行恢复。训练阶段数据准备准备用户-视频交互日志包含特征和真实观看时长y。EAD离散化用训练集训练一个浅层XGBoost回归模型预测log(1y)。计算残差e。对(ŷ, e)进行K-Means聚类例如聚成5个母簇。在每个母簇内根据样本比例分配子区间最终得到10个离散区间。保存区间边界[l1, r1), [l2, r2), ..., [l10, r10)。为每个训练样本打上区间标签1到10。计算每个区间的条件期望E_i即该区间内所有样本y的平均值并保存。分类模型训练构建DeepFM模型输入特征输出10维概率。使用带Focal Loss的交叉熵损失进行训练。在验证集上根据分类准确率或恢复后的回归指标如MAE调整超参数。推理阶段线上收到请求提取用户和候选视频的特征。输入DeepFM模型得到10维概率向量P。恢复模块计算预测时长 p1*E1 p2*E2 ... p10*E10。将预测时长输出用于排序或后续业务逻辑。5. 效果评估、实战陷阱与延伸思考任何模型框架的价值最终都要落到实际效果和落地可行性上。CREAD论文中展示了其在公开数据集和工业数据集上优于直接回归和均匀分桶分类方法的结果。但我们在自己实践中应该如何评估又会遇到哪些坑呢5.1 如何科学地评估CREAD的效果评估需要分两个层面分类效果和最终回归效果。分类效果评估准确率最直接的指标看预测区间是否命中真实区间。但要注意对于有序的区间预测到相邻区间如真实为第3类预测为第2或第4类的误差应该比预测到远处区间如第8类的误差要小。因此单纯准确率可能不够。加权准确率根据预测类别与真实类别的“距离”来加权计算准确率。距离越远惩罚越大。分类交叉熵损失直接反映模型输出概率分布与真实one-hot标签的差异。回归效果评估核心这是我们最终关心的。在通过恢复模块得到连续预测值ŷ后使用回归任务的标准指标MAE平均绝对误差。MAE mean(|y - ŷ|)。对异常值相对不敏感解释直观。MSE/RMSE均方误差/均方根误差。MSE mean((y - ŷ)^2)。对大的误差惩罚更重。MAPE平均绝对百分比误差。MAPE mean(|(y - ŷ)/y|)。衡量相对误差但y接近0时不稳定。特别重要的指标分组误差分析。不要只看全局指标。将测试集按真实时长分组如0-10s 10s-1min 1min-5min 5min分别计算每组的MAE或MAPE。这能清楚地告诉我们模型在短、中、长视频上的预测能力分别如何。CREAD的目标之一就是提升在难预测区域通常是中等时长和长尾的表现。5.2 实战中可能遇到的“坑”与应对策略EAD的稳定性问题EAD依赖于初始的基准模型和聚类算法。如果训练数据有小幅波动EAD产生的区间边界可能会变化导致标签分布不一致影响模型迭代。策略使用一个稳定的、数据量足够的子集如上周全量数据来运行EAD确定区间边界后固定下来用于未来一段时间如一个月的训练。定期如每月重新运行EAD评估边界是否需要更新。区间边界处的预测跳跃这是分类方法固有的问题。假设两个样本的真实时长非常接近但恰好落在区间的两侧如一个29.9秒一个30.1秒边界是30秒它们会被打上不同的标签。模型可能会学到完全不同的特征模式导致预测出的概率分布差异很大进而通过恢复模块算出的最终预测值可能产生一个不连续的“跳跃”。策略可以采用“软标签”或标签平滑。例如不为样本分配一个确定的类别而是分配一个分布让边界两侧的样本带有少量相邻类别的概率。这能缓解硬边界带来的不连续性。恢复模块的偏差如果分类模型预测的概率分布有系统性偏差例如总是高估短区间的概率那么即使分类准确率高恢复后的回归值也可能存在偏差。策略在验证集上校准模型输出的概率。可以使用Platt Scaling或Isotonic Regression等方法让预测概率的分布与真实分布更加匹配。校准后再进行恢复能有效减少偏差。线上推理延迟相比单一回归模型CREAD需要先运行分类模型可能很复杂再进行恢复计算。可能会增加少量延迟。策略分类模型本身是高度优化的恢复计算是简单的向量点乘开销极小。主要瓶颈仍在特征获取和模型前向传播。确保分类模型结构高效并利用模型剪枝、量化等技术进行加速。5.3 延伸思考CREAD思想的其他应用场景CREAD框架的精髓——“将困难回归问题分解为分类恢复并利用误差指导离散化”——具有很好的普适性可以迁移到许多其他具有类似数据特性的预估问题上电商客单价预测用户消费金额同样具有长尾分布大量小额订单少量巨额订单。可以用EAD对金额分桶预测用户本次消费最可能落入的金额区间再恢复出具体金额。内容生成时长预测预测用户创作一篇帖子、一个视频需要的时间。时间预估难度大分布不规则。交通出行时间预估预估从A点到B点的行程时间受路况、天气影响大分布复杂。可以将其离散化为“非常快”、“快”、“正常”、“慢”、“非常慢”等类别结合实时特征进行分类再恢复为具体分钟数。金融风控中的贷款违约损失预估预估违约可能造成的损失金额数据稀疏且长尾。分类可以判断损失等级低、中、高再精细化估计。我个人在尝试类似思路时的体会是这套方法最大的优势在于它提供了一种“分而治之”的工程化思维。当直接建模一个目标非常困难时先把它转换成一个更容易学习、更稳定的中间表示分类再通过一个确定性的、可解释的映射恢复得到最终结果。这种解耦让模型训练更稳定也让问题的调试和分析变得更清晰——你可以单独分析是分类不准还是恢复策略有问题。当然它引入了额外的步骤和超参数如区间数量K需要更多的实验和调优。但对于那些被回归问题折磨已久的场景CREAD无疑是一个值得放入工具箱的强力候选方案。