计算广告(七)

本文详细介绍了广告预估技术,包括点击率、转化率和深层转化率的预估模型,以及如何通过CTR/CVR/DeepCVR进行广告排序。重点讲述了预估流程中的离线和在线部分,涉及数据预处理、特征工程、模型选择和超参数优化。文章还探讨了协同过滤算法在广告推荐中的应用,并讲解了逻辑回归、梯度提升树等模型在广告排序中的作用。最后,讨论了A/B测试、损失函数阈值和模型评估指标,以及回归树和集成学习方法如随机森林和梯度提升树在广告领域的应用。
摘要由CSDN通过智能技术生成

广告排序技术

为什么要做预估

谈到CTR/CVR/DeepCVR,尤其在互联网广告这块,简而言之,就是给某个网络服务使用者推送一个广告,该广告被点击的概率/浅层转化/深层转化概率

由于现有广告排序遵循ecpm = ctr * cvr * deep_cvr * bid * alpha + hidden_cost,且要作为计费金额计算,所以和推荐、搜索最大的不同是,不能保证序正确,而是要保证整体预估的准确性

公式 ecpm = ctr * cvr * deep_cvr * bid * alpha + hidden_cost 代表了一个广告的eCPM(有效千次展示成本)计算方式。其中各个变量的含义如下:

ctr:点击率,表示广告被点击的概率。

cvr:转化率,表示用户点击广告后进行浅层转化(例如注册、填写表单等)的概率。

deep_cvr:深层转化率,表示用户点击广告后进行深层转化(例如购买、成为付费用户等)的概率。

bid:广告主的出价,表示广告主愿意为每次点击或转化支付的金额。

alpha:一个调整系数,用于平衡广告的各个指标,使eCPM更接近广告实际价值。

hidden_cost:隐藏成本,表示广告投放过程中可能产生的额外成本(例如广告管理费用、优化费用等)。

这个公式的主要目的是计算一个广告的整体价值,以便广告平台可以根据eCPM对广告进行排序和展示。然而,在广告投放过程中,我们不能保证单个广告的点击率、转化率和深层转化率都完全准确。因此,在实际运作中,我们需要关注整体预估的准确性,而不是单个指标的正确性。

在广告排序中,我们无法确保每个广告的CTR、CVR和DeepCVR都完全准确,因为这些指标受到许多外部因素(如用户行为、市场竞争等)的影响。相反,我们应该关注整体预估的准确性,即在整个广告投放过程中,各个广告的eCPM能够尽量接近其实际价值。通过这种方式,广告平台可以在不完全准确的情况下,为广告主提供较为合理的广告排序和投放效果。

预估算流程

编辑切换为居中

添加图片注释,不超过 140 字(可选)

预估服务模块拆解

离线部分:

数据收集:主要收集和业务相关的数据,通常会有专门的同事在app位置进行埋点,拿到业务数据;

预处理:对埋点拿到的业务数据进行去脏去重;

构造数据集:经过预处理的业务数据,构造数据集,在切分训练、测试、验证集时应该合理根据业务逻辑来进行切分;

特征工程:对原始数据进行基本的特征处理,包括去除相关性大的特征,离散变量one-hot,连续特征离散化等等;

模型选择:选择合理的机器学习模型来完成相应工作,原则是先从简入深,先找到baseline,然后逐步优化;

超参选择:利用gridsearch、randomsearch或者hyperopt来进行超参选择,选择在离线数据集中性能最好的超参组合;

Grid Search(网格搜索)是一种用于寻找最优超参数的方法,通过在预定义的超参数组合中进行系统性搜索,并根据交叉验证的结果选择表现最好的超参数组合。Grid Search 对于超参数数量较少的情况是可行的,但随着超参数数量的增加,搜索空间呈指数级增长,会导致搜索时间过长。

Random Search(随机搜索)是一种与 Grid Search 相对的搜索方法,它不同于 Grid Search 的是,不是在预定义的超参数组合中进行搜索,而是在超参数的定义域内随机采样。因此,Random Search 可以在较少的采样次数内找到接近最优的超参数组合。它的效率通常比 Grid Search 高,特别是在超参数数量较多的情况下。

Hyperopt(超参优化)是一种基于贝叶斯优化的自动超参数优化框架,它能够自适应地进行超参数搜索,减少手动调整超参数的繁琐工作。Hyperopt 可以在较少的采样次数内找到接近最优的超参数组合,并且它在搜索过程中不断地调整搜索空间,逐步缩小搜索范围,提高搜索效率。

Hyperopt 的主要思想是使用贝叶斯优化来更新超参数的先验分布。在贝叶斯优化中,我们根据当前已有的超参数和评估结果,不断更新超参数的后验分布,以便更好地指导下一次采样。具体来说,Hyperopt 首先需要定义一个超参数空间,包括每个超参数的类型(例如,连续型还是离散型)、取值范围等信息。然后,Hyperopt 利用这个超参数空间来采样一组超参数,并运行模型进行评估。根据评估结果,Hyperopt 使用贝叶斯优化算法更新超参数的后验分布,以便更好地指导下一次采样。这个过程不断重复,直到找到最优的超参数组合。

Hyperopt 在搜索过程中不断地调整搜索空间,逐步缩小搜索范围,提高搜索效率。因此,即使搜索空间非常大,Hyperopt 也可以在较少的采样次数内找到接近最优的超参数组合。同时,Hyperopt 还支持并行化采样和评估,可以进一步提高搜索效率。

总之,Hyperopt 是一种强大的自动超参数优化框架,它可以自适应地进行超参数搜索,减少手动调整超参数的繁琐工作,并在较短的时间内找到接近最优的超参数组合。

在线A/B Test:选择优化过后的模型和原先模型(如baseline)进行A/B Test,若性能有提升则替换原先模型;

在线部分

Cache & Logic 缓存&逻辑:设定简单过滤规则,过滤异常数据;

模型更新:当Cache & Logic 收集到合适大小数据时,对模型进行pretrain+finetuning,若在测试集上比原始模型性能高,则更新model server的模型参数;

Model Server:

接受数据请求,返回预测结果

预估技术概要

二分类问题

label: 0/1

特征: X(x1, x2, x3, ......, xn)

假设:寻找一个H,令p(x) = H(X)

Loss:-ylog[p(x)] - (1-y)log[1-p(x)]

评估:

offline:AUC/MAPE

online:业务指标

在广告点击预估中,我们的目标是预测一个广告是否会被用户点击。这是一个典型的二分类问题,因为我们有两个可能的结果:点击(label = 1)或不点击(label = 0)。

特征(X):这些特征可能包括广告的属性(如广告类型、广告主、广告尺寸等)、用户属性(如年龄、性别、地域等)以及上下文信息(如展示时间、展示位置等)。特征向量用 X(x1, x2, x3, ..., xn) 表示,其中 x1, x2, x3, ..., xn 是各个特征的数值。

假设(H):我们希望找到一个函数 H(X),它可以根据输入特征 X 预测广告被点击的概率 p(x)。这个函数可以是一个逻辑回归模型、决策树、神经网络等。

损失函数(Loss):为了评估预测结果的好坏,我们需要定义一个损失函数。在二分类问题中,常用的损失函数是交叉熵损失(Cross-Entropy Loss),用于衡量预测概率与真实标签之间的差距。公式为:-ylog[p(x)] - (1-y)log[1-p(x)]。我们希望通过训练模型来最小化这个损失。

评估指标:

离线评估:在模型训练完成后,我们需要使用离线评估指标来评估模型的性能。常用的离线评估指标有 AUC(Area Under the ROC Curve,受试者工作特征曲线下的面积)和 MAPE(Mean Absolute Percentage Error,平均绝对百分比误差)。AUC 能够衡量模型在不同阈值下的分类性能,而 MAPE 衡量预测误差相对于真实值的百分比。

AUC(Area Under the ROC Curve)

AUC 是受试者工作特征曲线(ROC Curve)下的面积。ROC 曲线是根据不同阈值下的真正类率(True Positive Rate, TPR)和假正类率(False Positive Rate, FPR)绘制的。AUC 能够衡量模型在不同阈值下的分类性能。

计算过程:

  1. 根据模型对每个样本的预测概率,对样本进行排序。

  2. 选择不同的阈值,计算相应的 TPR 和 FPR。TPR = 真正类数量 / (真正类数量 + 假负类数量),FPR = 假正类数量 / (假正类数量 + 真负类数量)。

  3. 根据不同阈值下的 TPR 和 FPR 绘制 ROC 曲线。

  4. 计算 ROC 曲线下的面积 AUC。

在广告预估场景中,AUC 可用于衡量模型预测广告点击概率的准确性。AUC 的值介于 0 和 1 之间,越接近 1,表示模型的分类性能越好。AUC 能够平衡正负样本的分类效果,特别适用于数据不平衡的场景,如广告点击预估。

MAPE(Mean Absolute Percentage Error)

MAPE 是用于衡量预测误差相对于真实值的百分比。它可以评估模型预测结果的准确性和稳定性。

计算过程:

  1. 对于每个样本,计算预测误差的绝对值与真实值的比值:( |预测值 - 真实值| / 真实值 )。

  2. 对所有样本的比值求平均,得到 MAPE。

在广告预估场景中,MAPE 可以用于评估模型预测广告点击概率的准确性。较低的 MAPE 表示模型预测结果与真实值接近,误差较小。然而,MAPE 对于真实值接近 0 的情况较为敏感,可能导致较大的误差。因此,在广告预估中,MAPE 可作为 AUC 的补充指标,但需注意其局限性。

在线评估:将模型部署到实际业务中后,需要根据在线业务指标来评估模型的效果。这些指标可能包括广告点击率(CTR)、转化率(CVR)、成本(CPA/CPC/CPM 等)以及广告收入等。

通过以上步骤,我们可以建立一个广告点击预估模型,用于预测广告是否会被用户点击。这对于广告投放和优化具有重要意义。

排序原始社会

规则适配

人工运营干预 & 配置

协同过滤

userCF

传统门户网站采用,推出内容偏热门

itemCF

电商网站采用,item侧的推荐更偏个性化

协同过滤(Collaborative Filtering):

协同过滤是一种基于用户行为(如浏览、购买、评分等)的推荐算法。协同过滤的核心思想是:如果两个用户在过去有相似的行为,那么他们在未来对物品的兴趣也可能相似;如果两个物品在过去受到相似用户群体的喜欢,那么它们在未来可能对相似的用户群体有吸引力。

用户协同过滤(UserCF):

UserCF 主要关注用户之间的相似度。计算过程如下:

  1. 计算用户之间的相似度。常用的相似度计算方法有皮尔逊相关系数、余弦相似度等。

  2. 对于目标用户,找到与其相似度最高的 K 个用户(K 为超参数)。

  3. 根据这 K 个相似用户对物品的行为(如评分、点击等),预测目标用户对物品的兴趣。

  4. 根据预测兴趣,为目标用户推荐物品。

UserCF 通常适用于传统门户网站,因为它倾向于推荐热门内容。在广告排序场景中,UserCF 可以用于为用户推荐可能感兴趣的广告。

物品协同过滤(ItemCF):

ItemCF 主要关注物品之间的相似度。计算过程如下:

  1. 计算物品之间的相似度。常用的相似度计算方法有 Jaccard 系数、余弦相似度等。

  2. 对于目标用户,找到其过去喜欢的物品。

  3. 根据过去喜欢的物品和物品之间的相似度,预测目标用户对其他物品的兴趣。

  4. 根据预测兴趣,为目标用户推荐物品。

ItemCF 通常适用于电商网站,因为它更注重物品侧的个性化推荐。在广告排序场景中,ItemCF 可以用于为用户推荐与他们过去喜欢的广告类似的其他广告。

UserCF(基于用户的协同过滤)和ItemCF(基于物品的协同过滤)在冷启动、离线广告推荐和在线广告推荐场景下的区别及优劣势如下:

冷启动问题:

UserCF:在冷启动场景下,UserCF表现较差,因为新用户没有足够的行为数据来计算与其他用户的相似度。这使得基于用户的协同过滤难以为新用户提供有效的广告推荐。

ItemCF:ItemCF对冷启动问题的处理相对更好。对于新用户,可以基于他们的少量行为数据,推荐与这些行为相关的相似广告。而对于新广告,可以通过计算与现有广告的相似度来进行推荐。

离线广告推荐:

UserCF:UserCF可以在离线场景下为用户生成个性化的广告推荐列表。然而,随着用户数量的增长,UserCF的计算复杂度会显著增加,导致计算效率下降。

ItemCF:ItemCF在离线场景下的计算效率相对较高,因为物品数量通常相对稳定。ItemCF可以为每个广告生成一个相似广告列表,然后在用户请求推荐时,根据用户的历史行为快速提供推荐结果。

在线广告推荐:

UserCF:在线场景下,UserCF需要实时计算用户之间的相似度,以响应用户行为的变化。这可能导致计算资源消耗较大,实时性受到影响。

ItemCF:ItemCF在在线场景下具有更好的实时性。由于物品相似度可以预先计算并存储,当用户行为发生变化时,可以快速根据相似广告列表提供实时推荐。

总结:

UserCF在处理冷启动问题和在线广告推荐场景时表现较差,但能够为用户提供较高程度的个性化推荐。

ItemCF在冷启动问题、离线广告推荐和在线广告推荐场景下具有相对较好的性能,但个性化推荐程度可能略低于UserCF。

针对UserCF在冷启动问题、离线广告推荐和在线广告推荐场景中的挑战,可以采用以下优化解决方案:

冷启动问题:

利用用户的人口统计学信息(如年龄、性别、地理位置等),计算相似用户,从而为新用户提供初始推荐。

为新用户提供热门或者编辑精选的广告推荐,以收集用户的行为数据,进一步进行个性化推荐。

利用内容过滤方法,基于用户的兴趣标签或者广告内容为新用户提供推荐。

离线广告推荐:

采用近似算法(如局部敏感哈希LSH)或者矩阵分解方法(如SVD++)来降低计算复杂度,提高计算效率。

对用户进行分组或者聚类,减少需要计算相似度的用户对数量。

定期更新用户相似度矩阵,而非实时计算,以减轻计算负担。

在线广告推荐:

采用增量式更新策略,当用户行为发生变化时,只更新与该用户相关的相似度,减少实时计算的开销。

结合其他推荐算法(如ItemCF、基于内容的推荐等),提高实时推荐的响应速度和准确性。

使用近实时计算框架(如Spark Streaming,Flink)来处理用户实时行为数据,降低计算延迟。

排序奴隶社会

LR

GBDT

LR+GBDT

编辑切换为居中

添加图片注释,不超过 140 字(可选)

LR定义:

逻辑斯蒂回归(Logistic Regression) 虽然名字中有回归,但模型最初是为了解决二分类问题。

线性回归模型帮助我们用最简单的线性方程实现了对数据的拟合,但只实现了回归而无法进行分类。因此LR就是在线性回归的基础上,构造的一种分类模型。

图形特征:

对线性模型进行分类如二分类任务,简单的是通过阶跃函数(unit-step function),即将线性模型的输出值套上一个函数进行分割,大于z的判定为0,小于z的判定为1

但这样的分段函数数学性质不好,既不连续也不可微。因此有人提出了对数几率函数,见上图右,简称Sigmoid函数

编辑

添加图片注释,不超过 140 字(可选)

sigmoid函数具有很好的数学性质,既可以用于预测类别,并且任意阶可微,因此可用于求解最优解。将函数带进去,可得LR模型为

编辑

添加图片注释,不超过 140 字(可选)

LR 模型就是在拟合 z = w^T x +b 这条直线,使得这条直线尽可能地将原始数据中的两个类别正确的划分开

编辑

添加图片注释,不超过 140 字(可选)

LR二分类表示

编辑

添加图片注释,不超过 140 字(可选)

回归问题的损失函数一般为平均误差平方损失 MSE,LR解决二分类问题中,损失函数为如下形式

编辑

添加图片注释,不超过 140 字(可选)

这个函数通常称为对数损失logloss,这里的对数底为自然对数 e ,其中真实值 y 是有 0/1 两种情况,而推测值 y^ 由于借助对数几率函数,其输出是介于0~1之间连续概率值。因此损失函数可以转换为分段函数

编辑

添加图片注释,不超过 140 字(可选)

举例

假设你是一名银行经理,负责决定是否批准客户的贷款申请。你希望建立一个模型,根据客户的年收入和信用分来预测他们是否会按时还款。在这个例子中,我们有两个特征:年收入(x1)和信用分(x2)。我们想要预测的是一个二分类问题:按时还款(y=1)或违约(y=0)。

首先,我们需要一个线性函数来表示这些特征与按时还款概率之间的关系:

z = β0 + β1 * 年收入 + β2 * 信用分

其中,β0、β1 和 β2 是待估计的参数。

然后,我们将线性函数 z 代入逻辑斯蒂(sigmoid)函数,将其转换为一个概率值:

p(y=1|年收入, 信用分) = 1 / (1 + e^(-z))

逻辑斯蒂函数可以将 z 的值映射到 [0, 1] 之间,这样我们就可以将其解释为按时还款的概率。

假设我们已经构建了对数似然函数 L(β0, β1, β2),现在我们需要使用梯度下降算法来最大化它。梯度下降的基本思想是从一个随机参数值的初始点开始,沿着梯度(即导数)的负方向更新参数值,以逐步逼近最优解。

梯度下降的主要步骤如下:

初始化参数值:为 β0、β1 和 β2 分配一个初始值,例如全部设为 0。

计算梯度:计算对数似然函数 L(β0, β1, β2) 关于每个参数的偏导数。这些偏导数构成了梯度。在逻辑斯蒂回归中,每个偏导数的计算公式如下:

∂L/∂β0 = Σ[yi - p(yi=1|Xi)]

∂L/∂β1 = Σ[yi * x1i - x1i * p(yi=1|Xi)]

∂L/∂β2 = Σ[yi * x2i - x2i * p(yi=1|Xi)]

……(如果有更多参数,依此类推)

其中,Σ 表示对所有训练样本求和,yi 表示第 i 个样本的实际标签(0 或 1),Xi 表示第 i 个样本的特征向量,x1i 和 x2i 分别表示第 i 个样本的年收入和信用分。

更新参数值:根据计算出的梯度,更新每个参数值。更新规则如下:

β0_new = β0_old + α * ∂L/∂β0

β1_new = β1_old + α * ∂L/∂β1

β2_new = β2_old + α * ∂L/∂β2

……(如果有更多参数,依此类推)

其中,α 是学习率,是一个很小的正数,用于控制梯度下降的步长。

重复步骤 2 和 3,直到参数值收敛(即相邻迭代过程中参数值的变化小于一个很小的阈值)或达到预设的最大迭代次数。

完成以上步骤后,我们就得到了最优参数值 β0、β1 和 β2。这些参数值可以用于构建逻辑斯蒂回归模型,从而预测新客户是否会按时还款。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

客户 1:y1 = 1,x11 = 50,x21 = 700

客户 2:y2 = 0,x12 = 30,x22 = 600

客户 3:y3 = 1,x13 = 80,x23 = 800

客户 4:y4 = 0,x14 = 40,x24 = 500

现在,我们需要计算p(yi=1|Xi)。在初始参数值(β0 = 0,β1 = 0,β2 = 0)下,计算每个客户的p(yi=1|Xi):

对于客户1:z1 = β0 + β1 * x11 + β2 * x21 = 0 + 0 * 50 + 0 * 700 = 0。将z1代入sigmoid函数:p(y1=1|X1) = 1 / (1 + e^(-0)) = 0.5。

对于客户2:z2 = β0 + β1 * x12 + β2 * x22 = 0 + 0 * 30 + 0 * 600 = 0。将z2代入sigmoid函数:p(y2=1|X2) = 1 / (1 + e^(-0)) = 0.5。

对于客户3:z3 = β0 + β1 * x13 + β2 * x23 = 0 + 0 * 80 + 0 * 800 = 0。将z3代入sigmoid函数:p(y3=1|X3) = 1 / (1 + e^(-0)) = 0.5。

对于客户4:z4 = β0 + β1 * x14 + β2 * x24 = 0 + 0 * 40 + 0 * 500 = 0。将z4代入sigmoid函数:p(y4=1|X4) = 1 / (1 + e^(-0)) = 0.5。

现在我们使用梯度下降算法来训练一个逻辑斯蒂回归模型。为简化计算,我们假设学习率 α = 0.01,并且只进行一次迭代。

初始化参数值:β0 = 0,β1 = 0,β2 = 0。

计算梯度(注意,这里我们省略了一些计算步骤):

∂L/∂β0 = Σ[yi - p(yi=1|Xi)] = (1 - 0.5) + (0 - 0.5) + (1 - 0.5) + (0 - 0.5) = 0

∂L/∂β1 = Σ[yi * x1i - x1i * p(yi=1|Xi)] = (1 * 50 - 50 * 0.5) + (0 * 30 - 30 * 0.5) + (1 * 80 - 80 * 0.5) + (0 * 40 - 40 * 0.5) = -100

∂L/∂β2 = Σ[yi * x2i - x2i * p(yi=1|Xi)] = (1 * 700 - 700 * 0.5) + (0 * 600 - 600 * 0.5) + (1 * 800 - 800 * 0.5) + (0 * 500 - 500 * 0.5) = -900

更新参数值:

β0_new = β0_old + α * ∂L/∂β0 = 0 + 0.01 * 0 = 0

β1_new = β1_old + α * ∂L/∂β1 = 0 + 0.01 * (-100) = -1

β2_new = β2_old + α * ∂L/∂β2 = 0 + 0.01 * (-900) = -9

注意,我们只进行了一次迭代,所以得到的参数值并不准确。在实际应用中,我们需要进行多次迭代,直到参数值收敛或达到预设的最大迭代次数。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

这里,x1表示用户年龄,x2表示用户性别(0表示女性,1表示男性),x3表示用户所在地区的编码(1、2、3等)。y是目标变量,表示用户是否点击了广告(1表示点击,0表示未点击)。

使用这些数据,我们可以训练一个逻辑回归模型,然后用模型预测新用户是否可能点击广告。例如,假设我们有一个新用户,其特征如下:

为了预测这位新用户是否会点击广告,我们需要将其特征代入训练好的逻辑回归模型。假设我们已经训练了一个逻辑回归模型,参数值如下:β0 = -1,β1 = 0.02,β2 = 0.5,β3 = 0.1。

计算线性函数z:z = β0 + β1 * x1 + β2 * x2 + β3 * x3 = -1 + 0.02 * 30 + 0.5 * 0 + 0.1 * 2 = 0.1。

将z代入逻辑斯蒂函数(sigmoid函数):p(y=1|X) = 1 / (1 + e^(-0.1)) ≈ 0.52。

由于预测概率p(y=1|X) > 0.5,我们可以预测这位新用户会点击广告。然后,广告平台可以根据这个预测来优化广告投放策略,将更有可能吸引该用户点击的广告展示给他们。

参数预估

现在有训练样本若干,如何训练得到能够使得模型准确工作的参数w的过程,就是LR的模型参数估计问题

损失函数来源

我们用极大似然法进行参数估计,因为我们需要p(Y = 1|x) 最大,同时我们也需要 p(Y = 0|x) 保持最大,很自然的,我们可以想到用极大似然法.

数据集

编辑

添加图片注释,不超过 140 字(可选)

变量

编辑

添加图片注释,不超过 140 字(可选)

假设

编辑

添加图片注释,不超过 140 字(可选)

似然函数

编辑

添加图片注释,不超过 140 字(可选)

损失函数

编辑

添加图片注释,不超过 140 字(可选)

我们对L(w)求极大值,得到w的估计值,模型就训练好了

举例

编辑切换为居中

添加图片注释,不超过 140 字(可选)

我们的目标是找到一个逻辑回归模型,可以预测给定年龄和收入的情况下,用户是否会点击广告。

首先,我们定义线性函数 z:

z = β0 + β1 * 年龄 + β2 * 收入

将 z 代入逻辑斯蒂函数(sigmoid 函数)得到概率:

p(Y=1|X) = 1 / (1 + e^(-z))

现在,我们定义对数似然函数:

L(β) = ∑[ y_i * log(p(Y=1|X_i)) + (1 - y_i) * log(1 - p(Y=1|X_i)) ]

我们的目标是最大化 L(β),找到一组参数 β0、β1 和 β2。这里,i 表示训练数据中的样本索引,y_i 是目标变量(是否点击广告),X_i 是特征向量(年龄和收入)。

为了最大化对数似然函数,我们可以使用梯

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值