Fork me on GitHub

深入互联网广告中的出价模式 — 再谈 oCPX 中的双出价

稿:申探社 公众号 gh_ed2d1dba4f53

在《申探社:深入互联网广告中的出价模式》(深入互联网广告中的出价模式 (上中下完整版)补充篇)系列文章中,我们初步探讨了双出价这种产品形式(本文的讨论建立在读者已经读过这一系列文章的基础之上,如果没有看过的同学,推荐先阅读一下)。双出价是指广告主可以出两个价格,一个浅度转化(例如激活)的价格,一个深度转化(例如付费)的价格。投放平台则尽量去同时满足广告主对这两种转化成本达标的诉求,或者这两个出价中隐含的浅度转化到深度转化的率的诉求。双出价在国内的很多大媒体的投放平台,已经不是新鲜产物,产品和技术也比较成熟了。虽然双出价外显的产品形态并不复杂,相比单出价就是多填一个价格,但是背后的实现方式却可以有很多变化,对应的投放策略也不尽相同。我们今天就再来深入聊聊双出价。

本文中我们主要探讨这么几个话题:

1. 为什么广告主需要双出价?

2. 三种双出价:不变率双出价,降率双出价,保率双出价分别有什么特性?

3. 不同广告主的需求应该由哪种双出价来满足?

4. 双出价投放的时候应该怎样调节浅度出价和深度出价?

5. 双出价起量是不是一定比深度单出价差?有什么办法可以提高双出价的跑量能力?

首先我们来看看为什么需要双出价。

一、为什么广告主需要双出价?

很多同事都和我抱怨过,为什么广告主都已经能对更深度的转化出价,并且平台已经能通过成本控制去保证广告主深度转化成本的情况下,广告主还需要对浅度转化行为的成本做约束呢?

我分析总结了一些广告主的需求,这些需求可以分为两类:

第一类需求:需要在深度成本达成的情况下,保浅度成本不超。具体原因如下:

  1. 后续付费节奏约束

假设我们花了1万块钱广告费,可以买到以下两批人中的其中一批:

  • A人群,10个付费用户,每个人首日付费100元
  • B人群,100个付费用户,每个人首日付费10元

付费成本方面,A人群为1000,B人群为100,B人群明显更低。但是计算首日ROI的话,都是10%。如果我们认为首日ROI是比付费更深度的转化行为,只看首日ROI的话,会觉得这两类人质量是一样的。但是事实上不同的广告主可能喜好不一致。

对于传奇类的游戏,可能更喜欢A人群,A人群第一天就充100,是个大R且后续充个10万8万的概率比B人群更大。这类游戏充得越多越厉害,不管充多少,游戏里都能花出去,付费节奏不受限制。只要有一个大R充了10万8万的,整个账户立马就回本了。这样A人群的长期ROI可能大于B人群。

但是对于另外一类游戏,这些游戏的付费是受约束的,可能就更喜欢B人群了。例如这个游戏过第5关,可能就只需要花100元,充多了也没有用或者用处小,过第10关,就需要200元,充多了也没有用。那么对于第一天就付了100元的A人群,后面每天再付100元的概率,是小于第一天就付了10元的B人群后面每天再付10元的概率的。这样A人群的长期ROI很可能就小于B人群了。在这种情况下,广告主会希望通过使用“付费-首日ROI”双出价来限制付费成本。

这在付费小说上也很常见,因为一个人看书的速度是有限的,第一天充100块钱的人,可能接下来1周都不需要再充了。而第一天充10块钱的人,接下来一周可能每天都还能充10块。

另外,对于B人群还有一个优势就是人数比较多,长期ROI的波动比较小。A人群只有10个人,如果有1,2个人少充了一些,对长期ROI的波动就会比较大。从长期回收的风险控制上来说,B人群也会好一些。

第二类需求:要保率(浅度转化到深度转化的率不低于一定值),如果深度成本是达成的,那么浅度成本不能太低。具体原因如:

  1. 提升更深度转化的效果

在《申探社:深入互联网广告中的出价模式》文中也提到过,有些更浅度转化漏斗的率(例如激活到次留率)会和更深度转化漏斗的率(例如次留到7留的率)正相关。在没有办法直接对更深度转化(例如7留)出价的情况下,通过保证靠更浅度漏斗的率不要太低,来保证更深度转化的效果(例如保证次留率别太低,来保证7留率也能达到一个比较高的值,从而有一个更低的7留成本)。

  1. 提高人效比

有一类广告主,转化链路中包含人工服务的过程。例如在教育行业,大多数流量都是先导到微信里,再经过试听课,最后转化成正价课。那么这里会有一个微信运营人员成本的考虑。最终广告投放ROI的分母里,除了广告费用还得加上人工运营的费用。如果买进来的人质量太差,转化成试听课或者正价课的比例很低,那么微信运营人员的人效比就会很差。假设有“入群-正价课”双出价的话(事实上因为回传延迟太久的原因,很难对正价课做出价),广告主可能就需要通过控制入群成本不要太低(从而入群到正价课的率不会太低)来达到控制人效比的诉求。

  1. 产品生态需要

有些游戏会需要使用激活付费双出价。为什么付费成本ok的情况下,还需要考虑激活成本呢?因为游戏的服务器,是有生态健康诉求的。假设一个游戏运营商,会对一个服务器导入买来的1万个用户,正常1个月后假设能留下1000个人。那么其中可能有1,2个大R,就有动力花钱买装备,好去砍剩下的998个玩家。如果付费成本ok,但是激活成本太低,说明p(激活->付费)概率很低。也就是说这些玩家的整体质量比较差,那么很可能这些玩家的留存率也很低。在1个月后,可能1万个用户只能剩下10个人。那么其中的那1,2个大R,可能都不愿意再玩下去了,更别说付费了。对于这种客户,也是希望能通过保证浅度转化到深度转化的率,来控制用户质量,从而保证产品内部生态。

二、三种双出价

对于这两类需求,有三种双出价产品(不变率双出价,降率双出价,保率双出价)可以来满足。其中不变率双出价和降率双出价,可以满足第一类需求;而保率双出价,可以满足第二类需求。

在本节中,我们依次来讨论下。为了方便讨论,我们都以“激活-付费双出价”作为例子,并且都假设在oCPM模式下。在此之前,我们先来回顾下单出价。

0. 单出价

作为和激活付费双出价的对比,我们以付费单出价为例。付费单出价的出价公式,大家应该都很熟悉,对于广告i,它的ecpm为(为表述简单,在本文中忽略ecpm计算时换算成千次展现,需要乘以1000的部分):

ecpm_{i}=CTR_{i}*CVR_{i}*DCVR_{i}*付费出价*Ratio

其中 CTR_i 是点击率p(曝光->点击), CVR_i是p(点击->激活), DCVR_i是p(激活->付费),Ratio是调价因子(某条叫风控系数)。在下文中,为了描述简单,我们都用这些缩写来表示这几个率。

在oCPM的连续竞价下,调价系统会通过调整Ratio的值,来达到使得最终付费成本等于广告主付费出价,也就是“四点三率两控制一加强”里的成本控制。这里把付费出价*Ratio看成是一个整体,那么它就是经过调价系统调节后的等效付费出价。如果当前付费成本小于付费出价,那么Ratio会被提高,从而使得等效付费出价提高,最终付费成本逐渐逼近付费出价;如果当前付费成本大于付费出价,那么Ratio会被减小,从而使得等效付费出价降低,最终付费成本也逐渐逼近付费出价。对于同一个pv请求,或者时间间隔很短的两个pv请求,同一个广告组的Ratio值是固定的。

一个出价产品的出价逻辑,主要就由出价公式和调价逻辑来定义。那么付费单出价的出价逻辑就可以写成:

ecpm_{i}=CTR_{i}*CVR_{i}*DCVR_{i}*付费出价*Ratio

调节Ratio使得 付费成本 = 付费出价

1. 不变率双出价

讨论前,我们把激活出价和付费出价中隐含的激活付费率用字母M来表示。在下文中,我们假设广告主的激活出价是100元,付费出价是1000元,则隐含的激活付费率M=10%(即如果两个成本都达成,激活付费率是10%)。另外,假设我们用付费单出价去投放,投下来的激活付费率用字母N来表示。这个N反映了当前流量下投放付费单出价,不主动干预激活付费率的时候,激活付费率的自然状态。最后我们把实际达成的激活付费率用字母K来表示。(记住M,N,K这三个字母的含义,后面的讨论都会基于这几个字母)

相比付费单出价,激活付费双出价多了一个激活出价。对于投放系统来说,除了要保证付费成本等于付费出价,还需要保证激活成本等于激活出价。

那么一个最朴素的想法就是,我们在不改变原来出价公式

ecpm_{i}=CTR_{i}*CVR_{i}*DCVR_{i}*付费出价*Ratio

的情况下,让系统在通过Ratio进行调价的时候,除了控制付费成本达成外,也控制激活成本达成。

当N<M时(假设N=5%,小于两个出价隐含的激活付费率M=10%)。在不改变出价公式的前提下,调价系统通过调节Ratio的大小,通常并不能改变这个率(注:虽然通过Ratio调价,从而使得ecpm落在不同出价范围,激活付费率可能会略有不同。但是这个率是高是低不确定,且和Ratio没有直接关系。且在激活/付费成本达标情况下,ecpm均值的范围不会有太显著的变化。大多数情况下,我们可以认为不主动干预的情况下,激活付费率不显著变化)。也就是说,最后投放下来的激活付费率K还是在5%左右。那么如果付费成本达标了(1000元),那么激活成本是1000*5%=50元,是欠成本的。而如果激活成本达标了(100元),那么付费成本是100/5%=2000元,是超成本的。

图片

当N>M时(假设N=20%,大于两个出价隐含的激活付费率M=10%)。同理,因为我们不能直接影响激活付费率,导致我们同样不能兼顾两个成本。如果付费成本达标了(1000元),那么激活成本是200元,超成本了;而如果激活成本达标了(100元),那么付费成本是500元,欠成本了。
图片

广告主通常不能接受超成本,更能接受欠成本。因此在上面两种情况下,我们会选择都让一个达标,另外一个欠成本。因为我们没有直接去改变竞得流量的激活付费率,我们把这种双出价叫做不变率双出价。这种出价方式的出价逻辑就是:

ecpm_{i}=CTR_{i}*CVR_{i}*DCVR_{i}*付费出价*Ratio
  • 如果付费成本>付费出价(或者如果N<M),调节Ratio使得 付费成本=付费出价
  • 如果激活成本>激活出价(或者如果N>M),调节Ratio使得 激活成本=激活出价

仔细观察下可以发现当N<M时,出价逻辑其实和付费单出价是没有区别的。而当N>M时,当调价收敛时,激活成本达成。也就是“等效激活出价” avg(DCVR_i * 付费出价 * Ratio) = 激活成本(这里为了不让公式显得太复杂,忽略了计费比,考虑计费比的话,也不影响结论)。因为付费出价是个常数,Ratio基本稳定到固定值,那么就有 = 激活成本 = 激活出价。那么我们的出价公式

图片

可以看到此时等效于激活单出价并且用DCVR来做加强(激活付费率高的出价调高一些,激活付费率低的出价调低一些)。也就是所谓的“oCPM-激活-Enhanced 付费”。

总结一下,不变率双出价,近似等效于一种介于付费单出价,和带付费作为加强点的激活单出价之间的一种出价。当N<M(即广告主两个出价隐含激活付费率较大时),更类似付费单出价;当N>M(即广告主两个出价隐含激活付费率较小时),更类似带付费作为加强点的激活单出价。

对于投手来说,需要知道的是,在这种双出价下,当N<M(即广告主两个出价隐含激活付费率较大时),激活是欠成本的,此时提高浅度出价是没有作用的,只有提高深度出价,才可以获得更多的量。而当N>M(即广告主两个出价隐含激活付费率较小时),深度是欠成本的,提高深度出价是没有作用的(虽然根据公式看能提高瞬时ecpm,这里说的是调价收敛后的理论情况),只有提高浅度出价,才可以获得更多的量。

2. 降率双出价

不变率双出价无法将两个转化成本都达成的原因主要是因为没有主动干涉竞得流量的DCVR(即激活付费率)。如果需要两个转化成本都达成,则我们需要想办法干预竞得流量的DCVR,使得激活付费率K接近两个出价隐含的激活付费率M。

图片

下面我先列出达成上述想法的两种比较基础的出价逻辑,我们再分析这两种逻辑会带来怎么样的投放效果。

a. 取min

出价逻辑:

图片

调节Ratio_A和Ratio_B尽量使得激活成本=激活出价,付费成本=付费出价

变形一下ecpm公式,并考虑到激活出价=付费出价*M,则有

图片

我们来分析下这个公式隐含的意义是什么。假设有这么一个场景,在一个广告请求里的有两个候选广告ad1和ad2,如果他们付费出价相同且Ratio_A和Ratio_B也相同,并且他们的CTRCVRDCVR都一样。但是ad1和ad2的DCVR一个高一些,一个低一些(相应的,DCVR高的CTR或者CVR会低一些)。

在付费单出价里,因为CTRCVRDCVR的乘积一样,这两个候选广告的ecpm是完全一样的。但是在取min双出价逻辑下,DCVR比较大的,\frac{付费出价*M*ratio_A}{DCVR_{i}}
的值更低,从而最终的ecpm比较低;而DCVR比较小的, \frac{付费出价*M*ratio_A}{DCVR_{i}}的值更大,从而最终的ecpm比较高。这样就达到了一定程度上,相比付费单出价,更加惩罚DCVR高的广告。从而达到拉低激活付费率的效果。这也是和不变率双出价最不一样的地方。

具体看个例子,假设两个广告的付费出价都是1000,激活出价都是100元,则M=10%,RatioA和Ratio_B都一致

ad1的CTR=0.1,CVR=0.2,DCVR=0.1

    ad2的CTR=0.1,CVR=0.1,DCVR=0.2

如果是付费单出价,可以看出来两个广告的ecpm是完全一致的,两个广告竞争力没有任何差异。但是对于降率双出价,两个广告的ecpm分别为

图片

可以发现DCVR高的ad2的ecpm是小于(min取到左边时)或等于(min取到右边时)DCVR低的ad1的ecpm的。

另外,我们需要分析下Ratio_A和Ratio_B是怎么来影响对DCVR惩罚的力度的。因为只有当这个惩罚力度是可以调节的,我们才能刚好让激活付费率和M一致,从而让两个成本都达标。我们知道如果当 \frac{付费出价*M*Ratio_A}{DCVR_{i}}>付费出价*Ratio_B 时min取右边,有

图片

可见并不会惩罚DCVR高的广告。只有当\frac{付费出价*M*Ratio_A}{DCVR_{i}}<付费出价*Ratio_B时,也就是DCVR_{i} >M*\frac{Ratio_A}{Ratio_B} 的时候,会被惩罚。那我们就可以根据 \frac{Ratio_A}{Ratio_B} 来控制惩罚DCVR的阈值,从而来控制最终的激活付费率K和M一致。

通过上述分析,我们可以知道,降率双出价通过惩罚DCVR高的广告来达到调节最终激活付费率K=M的目的。因此当N>M时,这个方法可以做到激活付费率和两个成本都达标。但是对于N<M的时候,因为我们无法奖励DCVR高的广告(最多就是做到不惩罚),来提升激活付费率K到M,因此我们无法实现最终激活付费率K=M的目的。在不改变激活付费率的情况下,效果就和不变率双出价是一样的,深度达成成本,但是浅度欠成本。这也是这种方法叫降率双出价的原因。

b. 加权平均

出价逻辑为

图片

其中alpha和beta是两个参数,调节Ratio_A和Ratio_B尽量使得激活成本=激活出价,付费成本=付费出价

类似取min的方法,我们也类似做一个公式变化,则有

图片

我们也可以看到,相对于付费单出价,对于DCVR高的是有惩罚的,和取min是类似的。并且当N<M时,也无法做到奖励DCVR高的广告。因此这种出价逻辑的表现和取min是一致的。

总结一下,不管是取min还是加权平均,当N<M(即广告主两个出价隐含激活付费率较大时)的时候,退化到和不变率双出价一样,深度成本达成,但是浅度欠成本。当N>M时(即广告主两个出价隐含激活付费率较小时),这个方法可以做到激活付费率和两个成本都达标。

对于投手来说,当N<M(即广告主两个出价隐含激活付费率较大时),和不变率双出价一样,深度成本达成,浅度欠成本,这个时候提高浅度出价是不会有影响的(虽然根据公式看能提高瞬时ecpm,这里说的是调价收敛后的理论情况),提高深度出价则能放出更多量来。而当N>M时(即广告主两个出价隐含激活付费率较小时),提高深度出价和浅度出价,都可以放出更多量来。如果深度出价不变,提高浅度出价,M也会被提高了,到了一定程度,就会变成N<M,那时提高浅度出价就不管用了。

对于双出价的第一类需求:需要在深度成本达成的情况下,保浅度成本不超。即可以用不变率双出价来满足,也可以用降率双出价来满足。都可以满足需求的条件下,哪个可以拿到更多的量呢?当N<M(即广告主两个出价隐含激活付费率较大时),他们的表现是一样的,没有差别。而当N>M时(即广告主两个出价隐含激活付费率较小时),不变率双出价会让浅度达成,深度欠成本。降率双出价相对于不变率双出价而言,等效于有两个变化:(1)把一部分率高的广告打压掉,降低激活付费率到M,让浅度和深度都欠成本。这个变化会让量下降(2)再提高出价,让浅度和深度成本上升到都达标。这个变化会让量上升。量一降一增,至于量最后是上升了还是下降了,就无法确定了,得看具体的数据分布情况。不好说谁比谁好。不过降率双出价有一个特点,就是理论上不管N>M还是N<M,最后理论上深度成本都是可以达成的(不超也不欠)。如果有对深度成本必须达成的诉求,则可以选择降率双出价。

3. 保率双出价

不变率双出价,和降率双出价,可以满足广告主的第一类需求,即深度和浅度成本都不超过出价。但无法满足广告主的第二类需求,即激活付费率要不小于两个出价隐含的率(即K>=M)。降率双出价可以惩罚DCVR高的广告来降低激活付费率,但是没有在N<M时鼓励DCVR高的广告的机制。我们需要再设计一下出价逻辑,从而可以鼓励DCVR高的广告。例如我们可以显式地在出价公式里,把DCVR作为一个因子。

ecpm_{i} = CTR_{i}*CVR_{i}*DCVR_{i}*付费出价*Ratio_A*f(DCVR_{i}, Ratio_B)

我们可以设计一个函数,在付费单出价的公式里增加 f(DCVR_{i}, Ratio_B) 来达到鼓励DCVR高广告的目的,并且可以通过Ratio_B来控制鼓励的程度,那么我们就有希望提高最终达成的激活付费率使得K=M了。 f(DCVR_{i}, Ratio_B) 的设计可以有很多,这里举两个比较简单的例子

a. 离散调节

f(DCVR_{i}, Ratio_B) = \begin{cases} 1 & DCVR_{i}>= Ratio_B\\ 0& DCVR_{i}< Ratio_B \end{cases}

分析这个公式可以知道,当DCVR小于一个阈值RatioB时,出价为0,相当于放弃掉低DCVR的流量。高于阈值时,则继续按付费单出价的价格去竞价。通过Ratio_B的调节,在N<M时,是可以控制最终激活付费率K=M的。但是如果N>M,是无法让最终激活付费率K降到M的。

b. 连续调节

f(DCVR_{i}, Ratio_B) = (\frac{DCVR_{i}}{avg(DCVR_{i})})^{Ratio_B}

当DCVR>avg(DCVR)时, \frac{DCVR_{i}}{avg(DCVR_{i})}是一个大于1的数,Ratio_B是个大于0的数,此时f也会大于1。表示DCVR高的广告被鼓励了。Ratio_B的值越大,DCVR高的广告被鼓励得越厉害。

当DCVR<avg(DCVR)时, \frac{DCVR_{i}}{avg(DCVR_{i})}是一个小于1的数,Ratio_B是个大于0的数,此时f也会小于1。表示DCVR低的广告被惩罚了。Ratio_B的值越大,DCVR低的广告被惩罚得越厉害。

其中Ratio_B可以根据现在后验激活付费率和目标激活付费率的差异来计算,从而调节对DCVR高广告的鼓励程度。

当然也可以设计其他的表达式,例如

f(DCVR_{i}, Ratio_B) = 1.0 + (DCVR_{i} - avg(DCVR))*Ratio_B

只要让DCVR高的f值也越大,且DCVR对f值的影响,可以被RatioB调节就可以。最好f值的均值最好在1附近,这样让Ratio_A和Ratio_B可以相对独立地调控成本的达成和率的达成。

图片

总结一下,不管是离散调节还是连续调节,当N<M时(即广告主两个出价隐含激活付费率较大时),通过鼓励DCVR高的广告来提升激活付费率,这个方法可以做到激活付费率和两个成本都达标;当N>M(即广告主两个出价隐含激活付费率较小时)的时候,退化到和不变率双出价一样,浅度成本达成,但是深度欠成本。

对于投手来说,当N<M时(即广告主两个出价隐含激活付费率较大时),通过提高两个出价,在M不变的情况下,可以放出更多量来。但是如果提高出价的程度不同,导致M发生了变化,可能会导致量变多或者变少。当N>M(即广告主两个出价隐含激活付费率较小时),退化到和不变率双出价一样,提高浅度成本可以放出更多量,但是当提高到一定程度,使得M大于N时,就会变成前面说的情况。

思考:为什么我们不设计一个f函数,让N>M时,惩罚DCVR高的广告,当N<M时,鼓励DCVR高的广告,从而实现不管N和M的关系如何,DCVR最终都能达成呢?答案是没这样的需求。通常对保率有要求的广告主,率更高对他们来说并不会有什么问题。如果在N>M的时候,去惩罚DCVR高的广告,把率压下来,对广告主没有什么好处。反而因为增加了额外的限制,通常对量也会有损伤。

至此,我们就把三种双出价都介绍完了。当然双出价还有赔付到底赔付深度还是浅度的问题,以及通过两个Ratio来调节多个控制目标带来的控制系统设计问题,就不展开讨论了。

三、双出价的起量问题

在《申探社:深入互联网广告中的出价模式》中,我们提到了双出价相比单出价,因为多了一个限制,把浅度成本不达标,深度成本达标的这部分流量给过滤了,导致在拿量上要比单出价差一些。但也提到了,广告投放是路径依赖的。双出价的浅度成本限制,会降低前期深度成本波动,有利于调价系统的发挥,可能学习得更稳,起量成功率更高,有可能全时间段的综合成本反而更低,或者拿到更多的量。

我们有没有办法来进一步缓解双出价的起量和拿量问题呢?有的,答案可能是分阶段双出价

广告主自己在操作账户的时候,有时也会遵循这么一个过程:先用浅度单出价(例如激活单出价)投一段时间,等模型积累了一些深度转化数据之后,对深度转化率预估更准之后,再切换到深度单出价(例如付费单出价)投放。双出价也可以参考类似的原理,在投放早期,考虑更多浅度的达成情况。随着投放的进行,再逐渐切换到同时考虑浅度和深度的达成情况。这样能更大地缓解双出价因为多一个限制带来的起量和拿量问题,甚至让双出价的起量比深度单出价更好。以至于有部分广告主,虽然没有第一类需求,也没有第二类需求,但会设置一个浅度成本来使用双出价,为了达到比深度单出价更好的起量效果。 等起量结束,再把浅度成本放开。 至于具体实现上,怎么在不同时期切换对浅度和深度考虑的程度,就要结合出价公式和调价策略来具体设计了。

四、总结

本文中,我们分析了广告主对双出价的两类需求。第一类需求:需要在深度成本达成的情况下,保浅度成本不超。这类需求可以通过不变率双出价和降率双出价来满足。第二类需求:要保率(浅度转化到深度转化的率不低于一定值)。这类需求可以通过保率双出价来满足。

后面我们详细分析了这三种双出价:不变率双出价,降率双出价,保率双出价。虽然现在技术发展很快,双出价的出价公式和Ratio的调节算法越来越复杂,但是基本原理都还可以归结到这三种双出价里。我们通过对这些较为基本的公式的学习,来理解这三种双出价的特点,从而指导我们设计更符合广告主诉求的出价产品,也能帮助我们更有针对性地使用双出价产品来进行投放。下面这个表,总结了这三种双出价的主要特性。(说明:表中的状态都是调价系统收敛后的理论结果。不包含在投放过程中例如因为预估偏高太多,或者调价系统把出价压死等等造成冷启动失败的情况)

图片


19年国庆的时候写了《出价》系列,20年国庆的时候写了《不确定度》系列。平时抽不出时间,只能又乘着国庆假期,更新了这篇。其他作者是日更,或者周更,希望我能尽量保持住年更。。。向各位读者的支持和理解,表示真心感谢。

又是招聘广告

在某手可以做最有趣最前沿的广告算法,初中高级广告算法职位均有HC。感兴趣的朋友欢迎加我的个人微信约饭约咖啡索要JD或发送简历。

作者个人微信(添加注明申探社读者及简单介绍):

图片


本文地址:https://www.6aiq.com/article/1634513201969
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出