干货 | XGBoost在携程搜索排序中的应用

XGBoost模型调参:GridSearchCV方法网格搜索优化参数 GridSearchCV是XGBoost模型最常用的调参方法。本文主要介绍了如何使用GridSearchCV寻找XGBoost的最优参数,有完整的代码和数据文件。文中详细介绍了GridSearchCV的工作原理,param_grid等常用参数;常见的learning_rate和max_depth等可调参数及调参顺序;最后总结了GridSearchCV的缺点及对应的解决方法。 阅读详情

作者简介

 

曹城,携程搜索部门高级研发工程师,主要负责携程搜索的个性化推荐和搜索排序等工作。

一、前言

在互联网高速发展的今天,越来越复杂的特征被应用到搜索中,对于检索模型的排序,基本的业务规则排序或者人工调参的方式已经不能满足需求了,此时由于大数据的加持,机器学习、深度学习成为了一项可以选择的方式。

携程主站搜索作为主要的流量入口之一,是用户浏览信息的重要方式。用户搜索方式多样、对接业务多样给携程主站搜索(下文简称大搜)带来了许多挑战,如:

  • 搜索方式多样化

  • 场景多样化

  • 业务多样化

  • 意图多样化

  • 用户多样化

为了更好满足搜索的多样化,大搜团队对传统机器学习和深度学习方向进行探索。

说起机器学习和深度学习,是个很大的话题,今天我们只来一起聊聊传统机器学习中XGBoost在大搜中的排序实践。

二、XGBoost探索与实践

聊起搜索排序,那肯定离不开L2R。Learning to Rank,简称(L2R),是一个监督学习的过程,需要提前做特征选取、训练数据的获取然后再做模型训练。

L2R可以分为:

  • PointWise

  • PairWise

  • ListWise

PointWise方法只考虑给定查询下单个文档的绝对相关度,不考虑其他文档和给定查询的相关度。

PairWise方法考虑给定查询下两个文档直接的相对相关度。比如给定查询query的一个真实文档序列,我们只需要考虑任意两个相关度不同的文档直接的相对相关度。相比PointWise,PairWise方法通过考虑任意两个文档直接的相关度进行排序,有一定的优势。

ListWise直接考虑给定查询下的文档集合的整体序列,直接优化模型输出的文档序列,使得尽可能接近真实文档序列。

下面先简单介绍XGBoost的应用流程:

XGBoost是一个优化的分布式梯度增强库,增强树模型,灵活便捷。但对高维度的稀疏矩阵支持不是很好,另外调参确实有点麻烦。

三、特征工程实践

在传统机器学习下,特征工程显的尤为重要,不论后续模型工程做的多好,如果前期的特征工程没有做好,那么训练的结果不会有多好。所以对特征处理的总体逻辑如下:

3.1 前期数据准备

首先,我们需要进行需求分析,就是在什么场景下排序。假设我们需要针对搜索召回的POI场景进行排序,那么需要确定几件事情:

  • 数据来源:搜索的数据就是各种POI,然后需要确定我们有哪些数据可以用来排序,比如最近半年的搜索POI的曝光点击数据等;

  • 特征梳理:需要梳理影响POI排序的因子,例如查询相关特征、POI相关特征、用户相关特征等;

  • 标注规则制定:每次搜索召回的每个POI,会有曝光和点击数据,简单点,比如:我们可以将曝光位置作为默认标注分,当有点击,就将标注分在原来的基础上加一;

  • 数据埋点/数据抽取:这是两种方式,可以根据实际需求进行选择;

    • 数据埋点:可以在线上实时生成特征,然后进行日志埋点,离线分析的时候可以直接从日志中拉取即可,这种方式,需要提前进行埋点。

    • 数据抽取:可以通过大数据平台拉取历史数据,然后进行离线计算抽取所需特征,这种方式虽然慢点,但是可以拉取历史数据进行分析。

3.2 特征处理

前期的数据准备工作完成了,接下来可以开始看看数据质量了。

  • 查看缺失值:绝大多数情况下,我们都需要对缺失值进行处理;

  • 特征归一化处理:监督学习对特征的尺度非常敏感,因此,需要对特征归一化用来促进模型更好的收敛;

  • 噪声点处理:异常的数据会影响模型预测的正确性;

  • 特征连续值分析:分析特征的值分布范围是否均匀;

  • 特征之间的相关性分析;

通过连续值特征可以分析每个特征值的大致分布范围,有利于对相关特征进行数据补充或者重新筛选。

通过特征相关性的分析,如上我们看到几个特征之间有很高的相关性,那么可以帮助我们做特征组合或者特征筛选等等方面决策。

四、模型工程实践

4.1 评估指标制定

在搜索业务中,考虑的有以下两种情况:

  • 看重用户搜索的成功率,即有没有点击;

  • 看重页面第一屏的曝光点击率;

在文章开头提到的L2R的三种分类中,我们在XGBoost参数objective配置“rank:pairwise”,同时使用搜索系统常用的评估指标NDCG (Normalized Discounted Cumulative Gain) 。

def _to_list(x):
    if isinstance(x, list):
        return x
    return [x]


def ndcg(y_true, y_pred, k=20, rel_threshold=0):
    if k <= 0:
        return 0
    y_true = _to_list(np.squeeze(y_true).tolist())
    y_pred = _to_list(np.squeeze(y_pred).tolist())
    c = list(zip(y_true, y_pred))
    random.shuffle(c)
    c_g = sorted(c, key=lambda x: x[0], reverse=True)
    c_p = sorted(c, key=lambda x: x[1], reverse=True)
    idcg = 0
    ndcg = 0
    for i, (g, p) in enumerate(c_g):
        if i >= k:
            break
        if g > rel_threshold:
            idcg += (math.pow(2, g) - 1) / math.log(2 + i)
    for i, (g, p) in enumerate(c_p):
        if i >= k:
            break
        if g > rel_threshold:
            ndcg += (math.pow(2, g) - 1) / math.log(2 + i)
    if idcg == 0:
        return 0
    else:
        return ndcg / idcg

4.2 初始模型训练

前期通过基础的模型训练,可以初步得出一些初始参数和相关特征的重要度等相关信息。

train_dmatrix = DMatrix(x_train, y_train)
valid_dmatrix = DMatrix(x_valid, y_valid)
test_dmatrix = DMatrix(x_test)


train_dmatrix.set_group(group_train)
valid_dmatrix.set_group(group_valid)
test_dmatrix.set_group(group_test)


params = {'objective': 'rank:pairwise', 'eta': 0.5, 'gamma': 1.0,
               'min_child_weight': 0.5, 'max_depth': 8,'eval_metric':'ndcg@10-','nthread':16}
xgb_model = xgb.train(params, train_dmatrix, num_boost_round=1000,
                           evals=[(valid_dmatrix, 'validation')])

import pandas as pd
 
print('特征名称', '特征权重值')
feature_score = xgb_model.get_fscore()
pd.Series(feature_score).sort_values(ascending=False)

4.3 模型调优五部曲

通过上述基础的模型训练,我们可以得出相关的初始参数,进入到五部曲环节,XGBoost参数调节基本为五个环节:

  • Step 1:选择一组初始参数;

  • Step 2:改变 max_depth 和 min_child_weight;

  • Step 3:调节 gamma 降低模型过拟合风险;

  • Step 4:调节 subsample 和 colsample_bytree 改变数据采样策略;

  • Step 5:调节学习率 eta;

例如我们在通过step1,可以观察弱分类数目的大致范围,看看模型是过拟合还是欠拟合。

通过step2调整树的深度和节点权重,这些参数对XGBoost性能影响最大,我们简要概述他们:

  • max_depth:树的最大深度。增加这个值会使模型更加复杂,也容易出现过拟合,深度3-10是合理的;

  • min_child_weight:正则化参数。如果树分区中的实例权重小于定义的总和,则停止树构建过程。

可以通过网格搜索发现最佳结果,当然也可以通过其他方式。

我们看到,从网格搜索的结果,分数的提高主要是基于max_depth增加。min_child_weight稍有影响的成绩,但是min_child_weight = 6会更好一些。

4.4 模型离线评估

通过调优五部曲,训练,生成最终的模型之后,就要进入离线评估阶段。离线拉取线上生产用户的请求,模拟生产,对模型预测的结果进行检验,根据在之前评估指标制定环节所提到的用户点击率和第一屏曝光点击率,比对线上用户点击产品的位置和模型预测的位置,同时对比两者之间的第一屏曝光点击率。

4.5 模型预测

通过AB实验,对模型进行线上预测,实时监测效果评估,方便之后的迭代和优化。

五、总结与展望

  • 对于传统的机器学习,最重要的一步是要做好需求分析,评估这种算法是否能有效解决该问题,否则得不偿失;

  • 前期的特征工程非常关键。通过多次的摸索发现,特征没有选取好,或者数据覆盖不全,标注没做好,导致后续模型不论怎么调优,都无法达到预定的效果;

  • 选定目标后,可以先尝试一些优秀的开源工具、优秀的数据分析工具。直观的图表能帮助你做更好的决策,优秀的算法库,能避免重复造轮子;

  • 单一的算法无法满足搜索排序应用场景,多模型融合以及深度学习方向需要做更深入的探索与实践;

【推荐阅读】


 “携程技术中心”公众号

  分享,交流,成长

【AI深究】XGBoost深度解析:原理、算法与工程实践——全网最详细全流程详解与案例(附详尽Python代码演示)|集成方法核心原理、算法细节、数学表达、工程实现与实际意义|参调技巧与代码示例可视化 大家好,我是爱酱。本篇将会系统梳理XGBoost(eXtreme Gradient Boosting)的核心原理、算法细节、数学表达、工程实现与实际意义,帮助你全面理解这一机器学习领域“常胜将军”的本质。 注:本文章含大量数学算式、详细例子说明及大量代码演示,大量干货,建议先收藏再慢慢观看理解。新频道发展不易,你们的每个赞、收藏跟转发都是我继续分享的动力! 阅读详情

相关推荐

数据挖掘实战-基于XGBoost的电力负荷预测系统开发

本文详细介绍了基于XGBoost的电力负荷预测系统开发实战,涵盖数据准备、特征工程、模型调优、系统架构设计及性能监控等关键步骤。XGBoost凭借其强大的特征组合能力和抗过拟合设计,在电力负荷预测中表现出色,显著提升预测精度和效率。文章还分享了工业部署中的实战经验,包括特殊日期效应处理和极端天气应对方案,为电力系统管理者提供实用参考。

weixin_27872611的博客 427

xgboost在LTR(学习排序)中的应用

LTR背景介绍 Learning to rank (LTR) 中文译为“排序学习”,在信息检索(IR)以及 NLP 领域都有着广泛应用,此外在计算广告、推荐系统场景下同样也有应用空间。就我个人所知,LTR 在 2010 年前后受到了相对较多关注,也出现了一批以 LTR 为基础的算法模型。随着 DL 的兴起,近些年 LTR 模型方面的研究已经相对较少,转而更多的以一种“思想”或“做法”的方式出现在了其他模型中。 LTR 模型定义 检索问题可以看做是给定 query 后,系统对文档集合中的候选 doc 进行检索

qq_40176087的博客 3997

【AI就业干货12】机器学习八股文速通:从损失函数到 XGBoost,一篇带走全部面试点

本文总结了机器学习面试的核心知识点,涵盖监督与非监督学习、线性模型、正则化、决策树、KNN/K-means、SVM、集成学习、梯度下降、评估指标、特征工程、降维、概率模型等内容。重点包括:损失函数选择(MSE/交叉熵)、正则化作用(L1稀疏/L2平滑)、决策树划分准则、集成学习方法(Bagging降方差/Boosting降偏差)、XGBoost优化等。提供了30秒速记口诀和XGBoost代码示例,帮助快速掌握面试要点。全文采用公式+代码+口诀的形式,系统梳理了机器学习从理论到实践的常见考点。

m0_51738372的博客 730

xgboost参数-调参

目录 一、xgboost 原生接口 重要参数 训练参数 预测函数 绘制特征重要性 回归例子 二、xgboost 的 sklearn 风格接口 XGBClassifier基本使用 XGBRegressor基本使用 三、xgboost 调参思路 四、参考文章 xgboost 包含原生接口和 sklearn 风格接口两种,并且二者都实现了分类和回归的功能。如果想了解一些理论性的内容,可以看看之前的文章: XGBoost算法的相关知识 一、xgboost 原生接口 重要参数 ...

Vulpes corsac 2万+

Python使用netmiko配置华为交换机

1.netmiko就是专门为网络设备做的模块,非常强大。1.更适合网络设备的自动化运维模块。2、批量配置变更、备份。1.安装netmiko。2. 创建SSH连接。一、netmiko介绍。

博然的宝藏库 2795

GraphSense介绍

GraphSense是一个跨账本加密货币分析平台 它的介绍在这里 代码也是开源的 graphsense-dashboard 用于交互式加密货币分析的Web仪表板。 可以看导进数据的情况 graphsense-transformation 基于spark/cassandra/java服务运行 GraphSense转换管道,用于将加密货币的区块/交易/标签等数据导入,可以看它指定的json格式: t...

幸福诗歌的博客 1081

XGBoost 重要参数(调参使用)

XGBoost 重要参数(调参使用) 数据比赛Kaggle,天池中最常见的就是XGBoost和LightGBM。 模型是在数据比赛中尤为重要的,但是实际上,在比赛的过程中,大部分朋友在模型上花的时间却是相对较少的,大家都倾向于将宝贵的时间留在特征提取与模型融合这些方面。在实战中,我们会先做一个baseline的demo,尽可能快尽可能多的挖掘出模型的潜力,以便后期将精力花在特征和模型融合上。这里就...

lizz2276的博客 3931

人工智能训练师技能等级认定四级技能考核试卷-样题4

本文为人工智能训练师四级技能考核试卷,包含六个实操考核项目,总时长150分钟。考核内容涵盖:1)车牌数据集规范评估与格式处理;2)车牌数据集采集代码修改与数据处理;3)房价预测数据集加载、预处理与可视化分析;4)车牌标注数据集审核与修正;5)螺丝螺母检测数据集的平台创建与共享;6)螺丝螺母数据的去噪处理与标注优化。要求考生使用Python编程、数据处理平台和标注工具完成各项任务,重点考察数据加载、格式转换、缺失值处理、数据可视化、标注审核及平台操作等技能。所有操作需在配备Python3.7和深度学习平台的W

weixin_42221934的博客 348

从L2R开始理解一下xgboost的 'objective': 'rank:pairwise'参数

我们首先对概念进行一下简单的介绍,然后结合例子来验证一下 两部分以红色为分界线 ---------------------------------------------------------------------------------------------------------------- 首先说一下 ranking即排序问题,这在信息检索等领域是需要解决的核心问题 简单来说...

爱吃火锅的博客 1万+

SRE校招面试全攻略:从基础理论到实战场景解析

本文为SRE(站点可靠性工程)校招面试提供全面攻略,涵盖计算机基础、运维核心技能、场景设计与系统架构等关键模块。文章结合真实面试真题,解析了从Linux原理、网络协议到容器化、监控告警等实战考点,并分享了高可用设计、故障排查等工程思维,旨在帮助应届生夯实基础、理清思路,从容应对SRE校招挑战。

bush的博客 643

OpenTCS打造移动机器人交通管制系统(四)

先分析下OpenTCS的一些策略方面的东西,这是OpenTCS的基础。 首先需要先明确下OpenTCS内核中的三个概念: 路由(Route) : 决定了车辆通过什么样的方式和算法来获得一段路径,未来车辆将沿着此路径运行。 派遣(Dispacher): 决定了一个订单应该关联哪一辆小车,即为订单分配车辆和为车辆分配订单。 调度(schedule):狭义上的调度,交通管制的核心,决定了何时分配...

白色冰激凌的技术专栏 5269

xgboost实例_干货 | XGBoost在携程搜索排序中的应用

作者简介曹城,携程搜索部门高级研发工程师,主要负责携程搜索的个性化推荐和搜索排序等工作。一、前言在互联网高速发展的今天,越来越复杂的特征被应用到搜索中,对于检索模型的排序,基本的业务规则排序或者人工调参的方式已经不能满足需求了,此时由于大数据的加持,机器学习、深度学习成为了一项可以选择的方式。携程主站搜索作为主要的流量入口之一,是用户浏览信息的重要方式。用户搜索方式多样、对接业务多样给...

weixin_39555179的博客 416

EM的理论与实践(基础篇)

EM理论与实践

m0_61544122的博客 2378

排序 np_干货 | XGBoost在携程搜索排序中的应用

作者简介曹城,携程搜索部门高级研发工程师,主要负责携程搜索的个性化推荐和搜索排序等工作。一、前言在互联网高速发展的今天,越来越复杂的特征被应用到搜索中,对于检索模型的排序,基本的业务规则排序或者人工调参的方式已经不能满足需求了,此时由于大数据的加持,机器学习、深度学习成为了一项可以选择的方式。携程主站搜索作为主要的流量入口之一,是用户浏览信息的重要方式。用户搜索方式多样、对接业务多样给...

weixin_39636079的博客 180

统计滤波器

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对统计滤波器做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 1643

控制科学与工程(自动化)保研经验【2】——南开、同济篇

禁止转载 1、南开人工智能学院夏令营   保研之旅第一个夏令营就是南开,南开夏令营非常早(6月份),当时我们专业仅有两人入营。夏令营前一天我们两个坐高铁来到了天津,几经辗转来到了南开的津南校区,非常偏僻。在自己找的酒店住了一晚,第二天一早去学院报到,资格审查、报销路费等等,然后开营仪式,吃饭,入住酒店,实验室参观。   开营仪式和实验室参观了解到,南开人工智能学院是国内第一批人工智能学院,和很多高...

Control Everything 6532

终于把XGBoost总结写出来了!

点击下面卡片,关注我呀,每天给你送来AI技术干货!Datawhale干货作者:王茂霖,华中科技大学,Datawhale成员内容概括XGBoost模型及调参总结XGBoost原理XGBo...

zenRRan的博客 262

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

搜索引擎算法基础与百度算法逆向分析全解析(干货长文)

【摘要】本文系统梳理了搜索引擎算法与逆向分析逻辑,涵盖百度搜索核心规则、影响因素及历史更新。内容分为算法基础、逆向方法论、技术实现等模块,强调原创内容、用户体验对SEO的重要性。文章详细解析了数据采集、特征提取等逆向分析方法,并提供Python爬虫等技术实现路径。同时警示合规边界,区分白帽/黑帽技术,指出深度学习带来的新挑战。最后推荐了5118等实用工具和开源学习资源,为SEO优化提供完整指导体系。(149字)

2602_95537051的博客 1514

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LambdaMART排序算法:从原理到工程实践,构建高效推荐与搜索系统

在信息检索与推荐系统中,排序学习(Learning to Rank)是提升用户体验与商业价值的关键技术。其核心目标是通过机器学习模型,对海量信息进行最优顺序排列,以取代传统基于规则的排序方法。LambdaMART作为该领域的经典算法,巧妙地将梯度提升树(GBDT)与Lambda梯度相结合,通过直接优化列表级评价指标(如NDCG),实现了从文档对比较到整体列表质量优化的跃升。该技术广泛应用于电商推荐、搜索引擎结果排序等场景,能有效处理复杂的特征交互,并以较高的训练和预测效率,成为工业级排序系统中的基石模型。

weixin_34413103的博客 598

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

基于NRBO-XGBoost回归模型:牛顿-拉夫逊优化算法与交叉验证的最新应用

咱不整虚的,先看效果:R2干到0.95以上,运行时间比传统优化快40%,关键这代码小白直接拖进Matlab就能跑!这TAO算子贼有意思,当检测到参数更新幅度过小时,会随机生成几个逃生方向,确保不会困在局部最优。基于牛顿-拉夫逊优化算法(NRBO)优化XGBoost的数据回归预测(可更换为分类/单变量和多变量时序预测,前私),Matlab代码,可直接运行,适合小白新手。牛顿-拉夫逊优化算法Newton-Raphson-based optimizer,NRBO,受到Newton-Raphson方法的启发。

2508_94252247的博客 406

【前沿】Purdue&UCLA提出梯度Boosting网络,效果远好于XGBoost模型!

点击上方,选择星标,每天给你送干货!干货作者:一元,四品炼丹师来自:炼丹笔记Gradient Boosting Neural Networks: GrowNet1. 简介本文提出了一种...

zenRRan的博客 260

2024年最新算法:基于NRBO-XGBoost回归与交叉验证的优化技术——实现数据预测与模型优化

基于牛顿-拉夫逊优化算法(NRBO)优化XGBoost的数据回归预测(可更换为分类/单变量和多变量时序预测,前私),Matlab代码,可直接运行,适合小白新手。基于牛顿-拉夫逊优化算法(NRBO)优化XGBoost的数据回归预测(可更换为分类/单变量和多变量时序预测,前私),Matlab代码,可直接运行,适合小白新手。牛顿-拉夫逊优化算法Newton-Raphson-based optimizer,NRBO,受到Newton-Raphson方法的启发。predictor就是SVM版本。

eniETIUz的博客 1622

2026年了,还在为电力负荷预测发愁?基于XGBoost的多变量单步预测全栈实战!

电力负荷预测是电网调度的“大脑”。在2026年的今天,准确的负荷预测对于能源优化至关重要。本文将带你复现一个完整的南方电网电力负荷预测项目。我们将使用XGBoost算法,基于1000条历史负荷数据,构建一个多变量单步预测模型。文章不仅涵盖了数据预处理、缺失值处理,还重点讲解了高级特征工程(时间特征、滞后特征、周期特征)的构建。最后,我们将通过可视化对比真实值与预测值,验证模型的精度。无论你是想学习时序预测,还是需要毕设参考,这篇指南都将为你提供巨大的价值。

专注AI与大模型技术,深耕NLP、RAG、Agent开发,分享Python机器学习与深度学习实战经验,助力技术成长。 785

基于NRBO-XGBoost回归模型与五折交叉验证的最新算法:从单变量到多变量时序预测的全面优化

基于牛顿-拉夫逊优化算法(NRBO)优化XGBoost的数据回归预测(可更换为分类/单变量和多变量时序预测,前私),Matlab代码,可直接运行,适合小白新手。基于牛顿-拉夫逊优化算法(NRBO)优化XGBoost的数据回归预测(可更换为分类/单变量和多变量时序预测,前私),Matlab代码,可直接运行,适合小白新手。牛顿-拉夫逊优化算法Newton-Raphson-based optimizer,NRBO,受到Newton-Raphson方法的启发。predictor就是SVM版本。

EQylwUYz的博客 387
上一篇: 干货 | 行为驱动开发在携程机票前端研发流程中的实践
下一篇: 干货 | 计算密集型服务的负载均衡策略
携程技术
博客等级 码龄10年 3715粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值