文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

拍卖的价格怎么定?聊聊转转拍卖场的起拍定价算法演变

2024-11-29 18:42

关注

1 有些什么——场景特点

这里我们首先向读者介绍一下转转的 ToB 场景,也即 APP 采货侠的业务场景,采货侠是转转公司针对 B2B 场景下的二手手机交易平台,其包含暗拍手机、一口价手机、多品类暗拍等多业务场景,感兴趣的小伙伴可以自行下载了解哈,这里着重了解其中暗拍的概念。

暗拍,顾名思义,是一种拍卖的形式,想必大家多少都了解,涉及到不同用户对不同商品的竞价。暗拍则是其中一种竞价各方对其他方出价价格不可见的形式,从商业意义上来说,目的是避免恶意抬价,或用低价压价,尽可能让商品在合理的价格区间最大可能售出,并且争取更多利润,其基本模式如下图:

图片

采货侠暗拍卖场每天包含下午与晚间两场,商品以起拍价标价上拍。卖场进行期间,买家可对不同商品进行出价,越高越有竞争力。当出价小于起拍价时则无法竞得商品,用户可查看特定时间段的竞价排名,以此决定后续是否继续出价。卖场结束后会自动对价最高者生成订单,该订单需要用户在后续完成支付结算。下面是基本流程示意与暗拍卖场的界面:

图片

图片

2 关注什么——核心指标

介绍完场景,笔者这里要谈的重点是起拍价。我们先从一个例子引入:

图片

假设一件商品回收成本为800元,本身的客观市场价值平均为1000元,预期利润为100元。卖家如果按1元起拍,正常情况几乎100%成交,即使竞价抬价行为会促使其在1-1000元成交,但实际上仍有很大可能所获利润为0甚至为负,竞价不充分,存在丢失毛利的风险。同样的,卖家如果按5000元起拍,可能理论上一本万利,但几乎不能成交,也等于没有利润,即使通过流拍策略不断降价,周转过慢,一样丢失毛利。

聪明的读者可能已经发现了,如果在这个例子中以合适价位起拍,自然能在保证成交的情况下留有合理利润空间,比如按照950元起拍,或许成交价格可以在1000、1020、1100甚至更高。退一步来说,若不成交,其流转周期也相对较短可及时止损。即使仅仅获得了951元的出价,也达到了我们的预期——既成交了也保证利润空间,也说明该商品或许现阶段买家最大预期即是如此,无法苛求更多,说明竞价过程已然充分。

足见合理的起拍价既是卖家视角拍卖商品的底线价值衡量,也是对商品能够充分竞价的保证。讨论其制定,首先需要以下三个指标:

图片

3 如何去做——衡量先行

那么如何定出合适的起拍价呢?回答这一问题前,要先回答一个问题,如何衡量起拍价是合适的?由果索因,有评价论才有方法论。有了指标,当然还需要知道如何去从指标反映效果。

如下图,从买家角度来看,起拍价是卖家给出的,是定量,出价是变量,最后的成交价必然是围绕着客观市场价值且大于起拍价的值,但作为制定起拍价的卖家一方来说,成交价才是定值,而起拍价是变量,起拍价一定是小于等于最终成交价且围绕着客观市场价值的值,而由于客观市场价值没有办法准确获取,最终成交价可以视为客观市场价值。

图片

既然如此一定存在如下关系,假设对于单个商品,起拍价为sp,成交价为dp,成本价格为cp,用函数F(sp)衡量起拍价的好坏,函数η(sp)表示溢价率,函数γ(sp)表示成交率,则有:

图片

该式有以下几个含义:

实际上,从卖家视角来看,最终的目标也是最初的优化出发点,是想提升毛利,从单一商品角度来看,毛利其实是不确定因素,因为成交价是由买家控制的,但我们仍然假设dp0为理想成交价,cp为固定成本价,即不会再有更高的成交价存在,设G(dp)表示毛利率与成交价的关系,g(sp)表示毛利率与起拍价的关系,那么存在以下关系转化:

图片

以上关系可以推出,若成交价为定值,起拍价按照真实成交价制定时,其所获利润最大,我们再把成交率和溢价率与起拍价的关系画出函数图像如下:

图片

可以看出当起拍价小于等于且逼近成交价时,成交率始终为1,溢价率逐渐趋近于0,而超出成交价时,成交率指数下降,溢价率也逐渐增大。自然不难发现,让F(sp)最大化即最大化成交率,最小化溢价率,而由于在小于成交价的范围内,成交率取得最大值1,那么理论上整个优化点则可以用如下式子描述:

图片

最终优化目标归结于使得起拍价从正向趋近于真实成交价,则该起拍价制定最为合理。而从评价的角度,则当成交的情况下,溢价率越小说明起拍价制定更好。

下面借助图来说明:

图片

当溢价越来越小时,利润空间右端点越向右,范围越大,毛利率也就越多。由于起拍价是从小于成交价的一边趋近,其成交率始终可视为1。

对于全局多商品来说,每个商品要么估价高了,模型向理想成交价降低价格促使成交,要么估低了,模型逼近成交价提升利润空间,同样适用降低溢价的理论。由此我们便找到了优化与评价的方向。

4 取经路上——早期实践与痛点

了解了指标和基本的思路,接下来就往前一些,从早期思路出发,探讨下演变过程中种种实践的得与失,优与劣。

4.1 基于回收价的实践

做电商必然要保证一定的利润预期,又要尽可能保证能成交,最直观的思路便是以下规则进行制定:

图片

这样做的优点是,简单直接,实现比较容易,卖场直接与回收挂钩,获得的毛利比较稳定可控,适合品类与库存规模相对单一的场景。但缺点相对也很突出,主要有以下几点:

所以这种思路在发展初期尚且可行,但在规模逐渐变大的情况下,难以长期运营。

4.2 基于价目表逻辑的实践

既然买家市场价值是最好的制定起点,我们不妨就沿着这个思路进行。尽管市场价值无法准确获取,但作为运营方可以通过历史数据、经验、规则辅以人工校准等确定一个SKU维度价目表,根据成色等其他机况再乘以系数,思路举例如下:

图片

该思路基于价目表这一先决条件的维护,用以模拟标品市场价格,随后再根据具体的成色、机况等确定系数进行微调。其优点是相对基于回收价出发,维护标准价格会使得整个链路模块化、细致化,制定相对准确。其不足之处也同样明显:

故在人力资源充盈且缺乏算法能力时,该方案值得一试,如果需要长期高效运营,自动化算法能力必不可少。

4.3 基于成交价策略的实践

如果需要自动化省时省力,又需要一定的准确性、时效性,再结合前一章中的内容,那么在已有的合适数据中能反馈其市场价值的首先是成交价。前面我们也提到,成交价对于卖家视角可以认为是定量,代表着买家的最终心理预期,基于历史成交价去制定起拍价,有以下好处:

出发点有了,要实现算法自动化,且效果足够理想,还需要设计整个算法系统,初期我们的框架构想如下:

图片

其基本的设计理念与内容有以下几点:

4.3.1 首次与流拍划分

首先将起拍价的制定分为两块,首次上架与流拍,分别指第一次进入卖场和多次进入卖场的商品,前者使用模型自动化出价,后者按前次价格与预置比例折价后再上架。

为何如此划分?我们可以基于一个基本假设,如果是理想模型,对于每一个商品在首次上架时就能制定出成交率为100%,溢价为0的起拍价,理论上就不存在首次与流拍,显然不可能。

必然一部分可成交,认为小于等于买家预期,另一部分不可成交超过买家预期。如果我们仍然在第二天仍用模型对不可成交的部分报价,由于模型每日更新,新模型给出的结果必然会出现价格跳变这一不可控因素,影响买家印象。

若认为模型给出的价格相对靠谱,即使流拍,我们以此为价格高点,逐渐平滑下降,这样能确保低溢价的同时逐渐增大成交可能,也减轻了模型负担,如下所示:

图片

4.3.2 SKU成交基准价

流拍策略较为简单的就缩小了求解范围,重点来到首次上拍商品定价模型。首先就是用成交价自动计算的“类价目表”,其基本逻辑如下:

图片

每一种SKU维度的商品都基于该SKU下的全部N个商品成交价格关于业务系数α放缩后进行加权平均,这里的放缩操作考虑了不同机况下的平滑机制,防止异常价格和卖场差异的影响,使最后的基准更加趋近于真实价值,α详细逻辑基于不同业务进行单独条件设计,这里不再详述。

通过这样较为简单的设计,可以将基准价的获取基于成交价自动化,有效且可解释,并且天然低溢价。

4.3.3 系数调控模块

在上一节中我们知道,合理的起拍价区间介于回收成本与成交价之间,假如市场恒定,即库存、需求、供货等稳定不变,我们必然可以找到一个稳定的起拍价使得成交/溢价最大化。

但很显然的是,实际上市场不会这么理想,对于不可控的市场因素,基于已然发生的成交价结果很难、甚至不太能用算法去捕捉这种变化因素,自然,人工介入的调控机制也不可或缺,这里需要引入以下三个维度的可配置系数:

这样做从原本商品粒度人力调控转到SKU×成色粒度调控,理想情况下本身相对准确的价格不必需要频繁调整,只需要根据市场反馈适当监控即可。

4.3.4 风控模块

即使是非常清晰简单的模型构建,风控模块仍然在价格领域不可或缺,毕竟即使是一个badcase也是利润的损失。风控模块在起拍价定价中主要起到两个作用,一是过滤纠偏异常价格,二是提高报价覆盖度兜底。

异常价格一般出现在特殊机况,比如质检项难获取、质检有误等异常质检机器,会通过单独维护机况条件进行系数控制,并依据回收价设置价格上下限,防止定价过低或过高。

报价覆盖度逻辑主要解决新机、老旧机器等数据稀疏,成交缺失的部分,让模型报价能力更全面,这部分分层处理,对于报价要求高的新机进行异常处理交予人工,对于报价要求低的老旧机器使用均价降级策略兜底,即细粒度机况缺失便向粗粒度聚合报价即可,最粗可以到机型粒度,如下图:

图片

整体来看,基于成交价策略的起拍价算法化的核心点是一种统计思路,并把问题拆解模块化,先拆报价范围,后拆策略模块,对于不同的模块制定不同的策略。在早期的实践中,该方案具有以下成效:

但在实践过程中同样有很明显的问题亟需解决:

5 修成正果——现有模型构建思路

针对4.3中提出的思路与缺陷,我们顺着这个模式进行进一步优化迭代,首先需要肯定的是,该思路中对于起拍价制定问题的模块化拆解思路值得延续,虽存在缺陷但基本都囿于具体的模块内,仅需进行针对性改进。

5.1 现有模型框架

整体给出现有的模型框架如下图所示:

图片

可以看到整体的模块设计与流拍逻辑基本上没有变化,不同在于模块内细节进行了大幅度调整,在首次定价模型上从SKU基准价直接跃升至商品粒度定价,下面将详述。

5.2 主要模块设计与思路

5.2.1 价格模块

相较于此前的SKU基准价格,本次价格模块丰富了较多内容,核心改进点有以下几个方面:

价格分布的刻画拟合能力不足,核心原因还是模型只是通过统计手段给出了SKU粒度的价格,然后使用统一的等级机况系数去推进到商品粒度。本质上还是停留在SKU×等级的粒度,很难将报价精确到每一种机况上。而本模块则将模型报价能力聚焦至质检项粒度,针对每一种不同的SKU——验机项单独报价,摒弃了不够准确的等级粒度。

粒度更细,传统统计方法自然无法满足期待,我们需要拟合SKU——质检项数据与历史成交价数据二者间的关系,对于多维度特征来说,机器学习模型当然更好。这里可选用的模型较多,常见回归模型均可,这里笔者选用决策树模型,整体基本逻辑与使用的特征类型如下:

图片

由于成交数据量不算庞大,且商品信息与质检项数据可以处理为纯表格数据,故而树模型更具有优势。另外在天然的可解释性前,不同商品、质检项特征可以根据重要性进行特征选择。

这里还有一些小trick,对于回归模型,可以将label价格取对数,调参时可适当增加树的复杂度以使得稍微过拟合,这样对于数据量有限的价格预测来说更具有稳定性。

敲定粒度,选型模型,自然需要回到最初的数据选择与特征处理,除成交数据与商品的基础特征外,本次引入的数据包括质检项数据与出价数据。

质检项数据即每台机器质检报告中项目的明细,其检测结果一般以ID与程度词进行描述,对于机器学习模型来说很难直接使用,于是首先需要对其进行预处理,处理方式如下:

图片

单一质检项的程度词(如细微、轻微、明显、严重)降序映射为分数(如8、6、4、2),而不同的质检项根据重要程度升序进行打分,另外根据价格排序下的质检项共现频次也可以获得不同机型下的核心质检项打分。通过这种方式就可以把离散程度值转为可比较的连续值,使机器学习模型可进行训练、验证、预测。

另外,每个商品在进入卖场后,无论是否最终成交,成交在什么价位,只要成交就一定有相应的出价,可能只有一个且等于成交价,也可能来自于不同买家的多个均小于等于成交价,其大致的分布如下:

图片

这里引入出价的含义为,即便成交价代表了最理想的成交结果,但合理的出价所落的区域则更能反映该商品在买家心中的价格锚点,用作风控是非常理想的,如果模型给的价格过于偏离锚点,则进行纠偏的置信度相比回收价更高,如果按照成本基线风控,其附近的价格点均浮动在异常出价附近,与成交基线相去甚远。

5.2.2 系数调控模块

既然价格模块已经能做到商品粒度报价,那么调控模块自然减少压力,仅仅需要全局系数与流拍系数即可实现整体的指标影响,由于本身拟合度高一般不需要细粒度微调,若需要则根据需要按由细到粗的生效优先级配置个别系数即可实现,其调节复杂度是O(1)级别。

5.2.3 风控模块

在上一节中提到使用出价作为风控价格锚点相比回收价更准确,以及降级聚合进行兜底收效不佳。那么对风控模块的迭代将针对这两处进行:

对于模型价格进行归正,直观的方式就是设置上下限,简单说就是需要模型报价落在合理区间,此前使用回收价作为锚点设置上下限反而倒反天罡,因小失大。作为锚点来说,历史成交价置信度最高,买家出价次之,最后才是成本价,这三种价格数据特点如下:


历史成交价

买家出价

成本价

覆盖率与数量

最低

中高

最高

置信度与准度

最高


最低

可以看到三种数据在两种特征上呈逆序排布,成交价很难在所有机器上都能覆盖,毕竟不能说所有的SKU×等级机器都有售出且数量可观,长尾机器一定存在,但是作为商品价值反映一定是最可信的,其余两种数据同理,于是设计上下限风控逻辑时可以做阈值控制,其大概逻辑如下:

# 阈值集合
thres_value_set = [tv1, tv2, tv3, tv4, tv5]
# 历史成交价
historical_deal_price_set = [dp1, dp2, dp3, ...]
# 历史出价
historical_offer_price_set = [op1, op2, op3, ...]

# 最终报价初始为模型报价
final_price = model_price
# 阈值判断: 历史成交价与历史出价均置信 以成交为超限判断
if historical_deal_nums > thres_value_set[0] and historical_offer_nums > thres_value_set[1]:
    # 超出上下限判断
    if model_price < min(historical_deal_price_set) * thres_value_set[2] or model_price > max(historical_deal_price_set) * thres_value_set[3]:
        # 最终价格取成交与出价均值
        final_price = (np.average(historical_deal_price_set) + np.average(historical_offer_price_set))/2
# 阈值判断: 仅历史出价置信 以出价为超限判断
elif historical_offer_nums > thres_value_set[1]:
    if model_price < min(historical_offer_price_set) * thres_value_set[2] or model_price > max(historical_offer_price_set) * thres_value_set[3]:
        # 超限取模型与历史出价的较大值 以保利润优先 未售出可流拍
        final_price = max(model_price, np.average(historical_offer_price_set)) * thres_value_set[4]

根据阈值控制置信度与区间范围,再根据同SKU×等级下的价格聚合值控制是否超限,超限后如何处理。这样做的好处是基本上能将模型可能会出现的异常报价控制在一个合理的范围内,并且所用到的系数不多,调节方便,阈值可以通过数据分析求解。

在提高覆盖率这部分逻辑中,先前的想法是细粒度的价格数据稀疏,就向粗粒度降级聚合,这样做虽然可以提高覆盖,但是很容易受货源结构影响,报价不准确且在稀疏侧容易被带偏。迭代中采取如下思路:

  1. 考虑商品的最低可接受报价粒度,在手机上则是机型×容量×等级;
  2. 现状是机型容量几乎满覆盖,但具体到等级甚至机况则历史缺失较多,要解决的低覆盖问题也在此;
  3. 基本思路是用粗粒度去推广泛化到细粒度,但直接用粗粒度聚合去替代报价,会发现偏差较大;
  4. 取而代之,将直接替代进行转化,举例说明如下:

图片

简单来说,根据已有的机型容量×等级聚合出机型容量均价,将等级序列化后,考虑机型容量均价与等级存在如下简单的线性关系,从而推广到全部机型容量×等级粒度,实现全覆盖,并且在划定价格段前提下一定程度内近似准确且严格防止等级倒挂,对于兜底报价需求能够满足。

至于求解上就比较容易了,使用一个简单的线性回归OLS模型即可对其进行求解,需要注意的是,在实际使用中对于这种简单模型,通常需要按照价格段划分,缩窄成交价格值域后训练多组线性模型进行覆盖补全时,效果更好。

5.3 效果与后续优化空间

介绍清楚了当前最优版本的逻辑与架构,我们简单看一下该版本投入采货侠拍卖场起拍定价后的效果,并讨论其后续改进方向。

5.3.1 模型效果

我们从苹果与安卓手机分别进行举例说明这个效果,下面图中为模型AB实验,对照组A为第三节中的SKU成交均价策略,实验组B为第四节新模型体系,脱敏隐去实际值,相同指标处于同坐标刻度下,苹果手机效果如下图:

图片

从品牌来看苹果手机特点是品类少,数据量大,高值商品多,价格方差小,所以本身在精确度,也即溢价率上本身效果较好,所以新模型在溢价率上小幅度降低,但在成交率上提升明显,说明模型在中低值商品上估价更准,使得商品流通速度更快。

图片

而从安卓机上来看,其品类繁多,数据量相对少,低值机器更多,价格方差大,本身成交率已经很高,相应的价格拟合度差,溢价高,于是新模型通过商品粒度报价、风控兜底改进,主要在报价准确上获得较大提升,数据上体现于成交率持平,溢价率大幅度下降。

本质上来说,其实模型优化的都是价格准确度,即降低价格方差,提升拟合度,让起拍价更逼近真实成交,只是在不同的商品结构上呈现不同的侧重点,本质上都是双端优化,既降低溢价又提升成交,使看起来trade-off的两个指标都获得提升,释放了利润空间。

为什么可以这么说,还记得系数调控机制吗,实际上我们只要对其中一幅图像中的模型报价输出进行放缩,两幅图像就会获得相同的呈现形式。因为放缩系数不改变分布,只是让成交和溢价呈现同步变化。而这个双端优化加上同步变化既释放了利润空间又给出了可通过调控应对市场的能力,且调节成本不高,方向明确。

5.3.2 后续优化空间

6 再说两句——总结

本文主要从起拍价定价这一实际应用场景出发,以实际问题举例,指标先行提供指导方向,再逐步介绍每一种算法思路,步步为营,扬长避短进行优化,最终给出目前还比较work的一种方案。作为算法类技术分享来说,本文不包含复杂高深的算法理论,单从分析、解决问题的角度演进,旨在分享系统化、模块化、结构化的思考方式,希望广大读者有所裨益,疏漏、不足之处万望海涵。

关于作者

陈烨,转转高级算法工程师,负责转转B端搜索召回、排序算法设计优化,以及B卖场起拍价定价算法、C卖场调价系统迭代优化等价格方向工作。

来源:转转技术内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯