“AI客户管理系统中客户画像引擎的设计与实现:从特征工程到流失预测的工程拆解”这个标题,其实是我去年主导落地的一个内部项目。做客户画像引擎这件事,行业里聊得很多,但真正从0到1把特征工程、标签体系、流失预测模型串起来跑通,并且能稳定支撑线上业务,中间有大量文档里不会写的坑。这篇文章想把我踩过的坑、用过的方案、以及为什么做某些技术选型的思考过程,完整拆开来讲。适合正在做AI客户管理系统、CRM智能化改造、用户增长或用户运营平台的工程师和数据同学参考,也适合产品经理了解工程实现边界。
1. 项目定位与整体架构设计
1.1 画像引擎在整个AI客户管理系统里的位置
先说清楚客户画像引擎到底解决什么问题。通常一个AI客户管理系统会包含客户数据汇集、画像分析、智能营销、服务策略推荐等模块,而画像引擎处于数据底座和业务应用之间的核心层。它做的事情,是把散落在不同业务系统里的客户数据,加工成“这个人是谁、他处于什么生命周期阶段、他接下来可能做什么”的结构化判断。
我接手这个项目时,公司已经有一套成熟的CRM系统,里面存了订单、工单、售后记录,还有一部分客服聊天记录。但业务方抱怨“客户数据很全,用不起来”。原因很简单:数据是原始状态的记录,不是可决策的画像。例如,数据库里存着客户上个月下了3单,但业务想知道的不是“3单”这个数字,而是“他是不是要流失了”。从数字到判断,中间缺的就是特征工程和建模逻辑。画像引擎就是填上这层认知鸿沟。
系统层面的设计目标,我定成三句话:第一,画像要能回答业务问题,而不是堆积指标;第二,画像要可更新、可追溯,不能是一个黑盒;第三,画像要能支撑实时和离线两类场景,比如实时识别高流失风险客户,做挽留动作。这个定位,决定了后续架构上不能只做一个标签表,而是要同时具备离线计算、在线服务、模型管理三种能力。
1.2 模块划分与技术选型考量
整体架构上,我把它拆成五个核心模块:数据接入层、特征存储层、标签计算层、模型服务层、画像API层。
数据接入层负责从业务库、日志中心、第三方平台拉数据。我们当时的数据源包括MySQL业务库、Kafka消息队列、埋点日志、企微聊天记录和短信回执。技术选型上,离线同步用DataX,实时接入用Canal监听MySQL binlog,日志走Filebeat到Kafka。这个组合没什么新奇,但贵在稳定,团队不需要额外学习成本。我特别提醒一点:实时接入不是越实时越好,要按业务场景区分。比如订单状态变化需要近实时感知,但客户基础资料每天同步一次就够,过度设计会带来运维负担。
特征存储层经历过一次比较大的演进。最早我把特征全放在MySQL,数据量小的时候没问题,客户量到百万级之后,订单特征、行为序列特征一展开,MySQL查询变慢,而且离线训练模型时拉特征特别痛苦。后来改造为三层存储:原始明细放Hive,汇总特征放ClickHouse,在线特征放Redis。离线训练从Hive和ClickHouse取数,在线推理从Redis取数,这样各司其职。ClickHouse做宽表查询和人群筛选非常顺手,也是画像标签服务的主力存储。
标签计算层和模型服务层是本文后面要重点展开的部分。简单说,标签计算层分成规则标签和算法标签两部分,规则标签用SQL和Drools规则引擎,算法标签交给机器学习模型。模型服务用Python flask封装,上线时通过镜像部署到Kubernetes。整体上,我们刻意避免造大轮子,没有引入专门的AI平台,因为团队规模摆在那里,能运维最大化收益的方案才是好方案。
2. 特征工程:画像引擎的质量命脉
2.1 从原始数据到可用特征的处理流程
特征工程是整个项目中我投入时间最多、也是最有回报的环节。很多团队喜欢把精力花在选模型上,但我做这个项目的体会是,模型效果的天花板,绝大多数取决于特征质量。甚至可以说,流失预测模型的AUC能不能从0.7提到0.85,靠的全是特征侧功夫,模型从LR换到XGBoost只贡献了很小一部分。
原始数据的处理流程,我总结为四步:清洗、对齐、聚合、存储。
清洗解决的是脏数据问题。客户数据里最常见的问题是重复客户和多数据源冲突。比如同一个客户在小程序下单留了手机号,在企微咨询留了微信号,系统里可能生成两条客户记录。我们当时的做法是建立客户ID映射表,用手机号、微信union_id、订单收货电话等多个维度做实体对齐。这一步看起来不像特征工程,但如果不做,后面所有特征都会算到错误的主体上,模型越准错得越离谱。
对齐要打通时间维度。客户行为数据天然是事件流,如果直接把所有历史订单放进模型,而不做时间截断,就会出现严重的特征泄漏。我在项目里专门写了时间对齐的工具函数,保证训练样本中的每个特征都基于观察期之前的数据计算。这个细节做不好,线下验证效果漂亮,线上一推就崩。
聚合就是把明细数据加工成特征。这里要区分统计窗口、统计粒度和统计口径。比如“最近30天订单金额”和“最近90天订单金额”是不同特征,“平均客单价”和“订单金额中位数”也不同。业务方给的指标通常很笼统,作为工程师要主动拆解。我在设计特征时有个习惯:每个特征都记录一段元数据,说明它的窗口、单位、缺失值含义,避免三个月后自己都看不懂。
2.2 客户画像特征体系的具体拆解
客户画像特征体系,我按五个维度来搭:基础属性、消费行为、互动行为、服务体验、时序模式。
基础属性包括性别、年龄、城市等级、注册渠道、注册时长、会员等级。这些特征单独看预测能力不强,但作为模型的背景变量非常重要。例如“注册渠道”这个特征,在渠道质量不均的情况下,实际上携带了大量用户质量信息。我曾见过渠道A进来的用户月流失率是8%,渠道B是25%,这个差异会被模型学到。不过要注意,基础属性里的隐私字段要合规处理,能不存明细就不存明细,尽量加工成泛化标签。
消费行为特征是最核心的一类。包括订单金额、订单频次、最近购买时间、购买品类分布、优惠券使用比例、客单价变化趋势等。流失预测场景里,“最近购买时间间隔”几乎是必选特征。这里有个经验:不要在特征里只放“R、F、M”三个值,RFM模型的三个原始值太粗了,我会拆出“近30天购买次数”“近90天购买次数”“平均购买周期”“距上次购买天数”“最近三个月金额环比”等更细的行为特征。
互动行为特征收集客户与产品/服务的接触频率。例如登录次数、浏览商品数、加入购物车次数、客服咨询次数、打开营销短信次数、点击邮件次数。互动行为反映的是“客户最近是否还活跃”。有些客户虽然没下单,但天天来看商品,这种客户不一定是流失,而是处于犹豫期。只建模消费行为,很容易把这类客户误判成流失。
服务体验特征通常被忽视,但实际效果很不错。包括售后工单数量、投诉次数、退款率、平均响应时长、最近一次工单是否解决。退款率和复购率之间存在强相关关系,如果客户最近有过退款纠纷,流失概率会显著上升。我们把客服会话记录的文本跑了一遍情感分析,产出“客服会话负面情绪比例”作为特征,虽然模型增益不算高,但在人群分析阶段非常有用。
时序模式特征是我后期加的一组特征,主要捕捉客户行为的变化趋势。比如“近30天订单金额减去近60天订单金额的差值”“最近4周活跃天数的斜率”“购买品类集中度变化”。这类特征表达的是一种动态过程,单纯用静态聚合值体现不了。我在实操中发现,把特征从“状态量”升级为“变化量”,对流失预测的效果提升非常明显。
2.3 特征处理中的“为什么”
这里重点解释几个关键陷阱,都是我实际踩过的。
第一个陷阱是目标泄漏。我在第一版模型里,顺手把“是否有退款”作为特征放进去,结果AUC达到了0.93。当时还高兴了一下,后来发现标签和特征在时间上有重叠——我在预测未来30天是否流失,但特征里用了未来30天内的退款记录。这种泄漏会让模型在测试集表现虚高,上线后断崖式下降。排查方法很简单:构建特征时,强制要求每条特征的计算日期必须早于样本的观察期截止日,可以写个校验脚本定期检查。
第二个陷阱是缺失值处理。客户行为特征天然稀疏,比如新客户没有历史购买数据。不要盲目把缺失值填0,要区分“无意义缺失”和“真实为0”。新客户没有消费记录是真实为0,老客户某个时间段没有消费则是一种状态信号。我们当时是分特征处理:计数类特征缺失填0,比率类特征缺失填-1,再额外加一个“是否有历史购买”的二值特征。这样做模型效果比统一填0好不少。
第三个陷阱是样本权重。CRM里的活跃客户和沉默客户数量完全不均衡,直接训练模型会偏向多数类。我们后来采用了两类做法:一是用下采样把负样本比例控制在4:1到2:1;二是对近期样本赋更高权重,因为客户行为模式会随时间漂移,三年前的样本参考价值有限。实操中,我甚至给训练集的每个样本加了一列“数据日期”,方便后续做时间衰减实验。
3. 客户画像标签体系与画像引擎实现
3.1 标签分层与口径定义
画像引擎最终面向业务输出的是标签。标签系统如果不做分层和口径控制,很快会变成一团乱麻。我把标签分成三层:基础事实标签、规则标签、算法标签。
基础事实标签直接来自源数据,几乎不做加工,例如“客户等级=金牌”“注册渠道=抖音”“最近一笔订单日期=2024-05-20”。这类标签要求口径绝对清晰,一个客户只能有一个值。规则标签是通过明确规则计算出的中间结果,例如“高价值客户=近90天消费金额>5000且订单数>3”,规则由业务方和数据分析师共同定义,逻辑透明、可溯源。算法标签是模型产出的,例如“流失风险评分=0.87”“下一月购买概率=0.45”,算法标签的值是连续分,但对外会切成高、中、低档位,方便运营操作。
口径定义是个容易在协作中出问题的地方。比如“流失客户”这个标签,业务方口中的流失可能是“30天未购买”,而数据分析师统计的是“60天未购买”。我在项目里专门建立了一个标签口径文档,每条标签都写明定义、计算公式、更新频率、负责人。同时建立标签审批流程,新标签上线前要经过评审。痛过一次之后我明白了:标签系统真正的复杂度不在技术实现,而在治理。
3.2 离线批处理与实时流计算的配合
画像引擎的计算模式,我采用“离线为主、实时为辅”的策略。离线批处理每天凌晨跑,把全量客户的几百个标签算一遍,覆盖大部分业务场景,比如人群圈选、报表分析、模型训练。实时流计算只在少数场景启用,比如客户刚发起高价值咨询时,需要立刻更新他的“意向等级”标签,让客服工作台弹窗提醒。
离线批处理主链路用Spark SQL跑Hive表,产出标签宽表,再写入ClickHouse。为什么不用Hive直接对外查询?因为Hive查询延迟太高,秒级都做不到。ClickHouse对这个场景很合适,百万级客户、几百个标签,做亚秒级筛选完全没有压力。实时链路用Flink消费Kafka流数据,更新Redis里的在线标签,同时在HBase记录完整的标签变更日志。Flink的引入是后加的,最开始实时部分直接用消费Kafka的Python进程,但状态管理太弱,大量时间在处理去重和乱序,后来换了Flink才消停。
标签更新频率上,我做了差异化设计。基础属性标签每天更新一次,消费行为标签每天更新一次,实时互动标签秒级更新,模型预测分每天更新一次、遇到特殊触发事件(如客户发起退款)立即重算。这个设计不是拍脑袋定的,而是和业务方梳理了所有标签的使用场景,只有实时触发有明确业务动作的标签才付出实时计算的成本。
3.3 标签存储选型:宽表、Bitmap与图查询
标签存储是一个容易被低估的环节。标签数量一多、人群筛选需求一复杂,存储结构不合理会导致查询卡死。
我们最终采用了多存储并存的方案:ClickHouse宽表作为标签主存储,支持灵活筛选和明细查询;Doris作为BI报表查询的加速层;Redis存高日活的在线标签;业务上需要做人群交并差运算的,用ClickHouse的BITMAP类型。
为什么特别提Bitmap?因为运营经常要圈人,比如“近30天有购买且城市等级在一线且流失风险评分大于0.8”的客户。这类人群交并计算在普通宽表里要做多次过滤和join,速度慢。把每个标签值映射为一个Bitmap集合,交并差就是位运算,速度能提升几个数量级。ClickHouse原生支持Bitmap,配合groupBitmapState函数,人群计算可以控制在秒级。
关于图数据库,当时很多同行建议我们引入Neo4j做关系图谱,但评估下来,我们的场景中关系挖掘还比较弱,图数据库引入的运维成本大于收益,就暂时搁置了。图存储更适合做“客户到底影响了谁”这类深度关系分析,这是下一个阶段的事。做架构选型时,不做超前的技术储备,是成熟团队必须有的克制。
3.4 画像服务API层实现要点
画像查询要提供给多个下游系统调用,比如CRM工作台、营销自动化系统、客服工作台。API设计上,我做了一套统一接口,提供以下能力:客户标签查询、批量获取人群、实时标签更新、画像标签血缘查询。
API层用Java Spring Boot写,内部封装了缓存策略。客户标签查询接口的QPS不高,但单次返回字段可能很大,所以我们做了两级缓存:Redis缓存热门客户画像,进程内Caffeine缓存超热门客户标签。缓存有效期的设计也有讲究:基础标签缓存一天,行为标签缓存几小时,实时标签缓存几十秒。如果一刀切缓存,就会出现实时标签失效或者查询压力过大的问题。
画像服务还做了一个我自认为很有价值的功能:标签血缘页面。外部只要传入一个客户ID和一个标签名,就能看到这个标签的计算链路和依赖的特征。这个功能刚开始被研发吐槽没什么用,但实际上线后,支撑了好几次业务侧的“标签对不对”质疑,也帮数据分析师快速定位口径变更的影响范围。数据产品里,可解释性是最容易被忽略又最容易赢回信任的要素。
4. 流失预测模型:从样本到上线
4.1 流失定义与样本构建方法
流失预测是一个二分类问题,但“流失”的定义必须先有业务共识。我们在项目初期拉上运营、客服、销售负责人一起开会,聊“什么样的人算流失”。最终确定:观察期取过去90天,表现期取未来30天,如果客户在未来30天内既没有订单行为也没有有效互动,就标记为流失。这个定义不是最复杂的,但胜在容易统计、容易对齐业务感知、也容易解释。
样本构建时,我们划分了三类数据集。训练集:第0天到第200天的数据,正负样本按状态标注;验证集:第200天到第260天;测试集:第260天到第320天。这里的关键是“样本生成日期”必须落在观察期之后,不能和特征窗口重叠。训练样本大概有80万条,正样本比例约18%。
正负样本不平衡的问题在流失预测里很典型。1个月里流失的人可能占20%,但如果把流失定义为“未来30天无订单且无互动”,正样本占比能到30%以上。即便如此,我们还是在下采样之外用了class weight方式,让模型在训练时更关注少数类。测试下来,下采样配合class weight比单独用某个方法效果更好。另外一个细节是:建模时不要只采样正负样本,还要保留一批最近时期的样本做时间外验证,用来评估模型在真实线上环境的表现。
4.2 为什么选择LightGBM而不是深度学习
模型选型上,我对比过逻辑回归、随机森林、XGBoost、LightGBM和简单的MLP。最终线上使用的是LightGBM,主要原因有三个。
第一,稀疏特征的处理能力。客户行为特征有大量0值和缺失值,LightGBM基于直方图算法,天然能处理稀疏特征,不需要像神经网络一样做大量的embedding处理。第二,训练速度和调参效率。在800个特征、80万样本的规模下,LightGBM几分钟就能训完一轮,迭代速度快,这在业务探索期非常重要。第三,可解释性。流失预测不是一个完全交给机器的场景,运营和客服需要知道“为什么预测这个客户会流失”。LightGBM能输出特征重要性,也能配合SHAP做解释,这是神经网络给不了的。
深度学习在我这个场景里没有成为主力,很大原因是数据量不够。客户行为序列如果用LSTM或Transformer建模,需要更长的历史行为序列和更大的样本。我们做过一版行为序列建模实验,效果提升有限,但训练和部署复杂度翻了几倍,性价比不高。做工程选型,永远要在效果和成本之间找平衡,不要被新技术的热度带着走。
4.3 特征筛选与训练细节
特征总量最后控制在800多个,但这是筛选后的结果,早期版本曾经有2000多个。特征筛选我用了几层策略:第一层靠业务逻辑,砍掉明显不靠谱或口径混乱的特征;第二层靠缺失率,缺失率超过80%且业务解释性弱的特征不要;第三层靠统计方法,计算每个特征与标签的相关性或卡方值,留下前300个;第四层靠模型的特征重要性,取LightGBM输出的前200个高频特征,再和前面的相关特征做并集。
训练细节上,有几个配置值得记录。学习率0.05,树深度6,叶子数31,正则化参数alpha和lambda都开了,early stopping轮数50。为什么学习率用小值?因为客户数据噪声大,学习率太高容易过拟合,宁可训练慢一点也要保证泛化。数据采样上,我对训练集做了时间加权,越靠近当前的样本权重越大,这样模型才能跟上客户行为模式的漂移。
训练完成后,还做了特征一致性校验。这个环节特别重要,因为离线训练用的特征和线上请求时的特征可能出现偏差。我专门写了一个离线-在线特征一致性对照工具,随机抽100个客户,把离线特征和线上实时获取的特征做对比,差异超标的特征直接报警。很多模型上线后效果下滑,问题就出在线上线下特征不一致,这个工具帮我们省了很多排查时间。
4.4 评估指标与业务成本权衡
流失预测的评估,不能只看AUC。我见过不少团队把AUC提到0.9就兴奋得不行,但业务上根本用不起来。我们用三个指标综合评估:AUC、召回率、以及Top N命中率。
AUC衡量整体排序能力,代表模型把流失客户排在非流失客户前面的概率。召回率更贴近业务,我们设定阈值后,看预测出来的流失名单里,真正流失的人占多少。Top N命中率是运营最关心的:给定运营可触达的客户数量上限(比如一天最多能打电话给5000个客户),从预测得分最高的5000人里,有多少人真的流失了。评估模型是否可上线,我一般要求:Top 5000命中率不低于40%,且比规则方案高出至少10个百分点。也就是说,模型圈出5000个高流失风险客户,里面至少要有2000个真的流失,如果做不到,运营会觉得模型不如老业务员的直觉。
阈值选择上,不能单纯取0.5。我们画了PR曲线和成本收益曲线,根据单客挽留成本和挽回客户的平均生命周期价值,算出最优阈值。这里最大的心得是:阈值不是技术参数,是商业决策参数。技术团队把得分给出来,阈值应该由运营和财务一起拍板,我们只是把不同阈值下的收益测算给他们看。上线后,阈值也要按月复盘,因为营销资源、产品版本变化都会影响最优阈值。
5. 工程落地、监控避坑与实操心得
5.1 模型推理服务与线上部署细节
流失预测模型上线,采用的是“画像服务内置模型接口,不单独部署模型服务”的轻量方案。原因很简单:画像服务本身已经依赖Redis和ClickHouse,模型推理只需要读取特征并做一次LightGBM预测,不需要独立的计算资源。LightGBM的C版本模型文件只有几十MB,加载到内存做预测,单次耗时在毫秒级。
不过模型推理服务还是做了一层容灾。因为画像服务是Java写的,模型预测用Python的header lib更顺,所以我起了一个独立的Python进程,通过gRPC提供预测接口。Java调用gRPC,Python负责加载模型并返回得分。选gRPC而不是HTTP,是因为内部服务调用量大,gRPC性能好且支持连接复用。如果你们团队没有历史包袱,也可以直接把模型用ONNX导出,Java直接加载ONNX模型做推理,省一个独立服务,后续版本我们正在考虑这样合并。
预测触发的时机,我们做了离线全量刷新和实时事件触发两种。离线全量:每天凌晨所有客户重新算分。实时触发:当客户发生退款、投诉、连续多天未登陆等特殊事件时,立即更新他的流失分。实时触发由耦合在数据接入层的事件规则引擎完成,规则引擎发现的特殊事件会发到Kafka,Flink消费后调用Python推理服务更新Redis。这个设计避免了全量重算的代价,又保证了特殊场景下画像的时效性。
5.2 特征泄漏的排查与数据监控
特征泄漏是流失预测模型里最隐蔽的问题之一。除了前面说的时间重叠,还有一种泄漏特别容易踩:客户维度的全局统计特征。比如“客户总订单数”“历史累计消费金额”,这类特征看起来人畜无害,但在样本构建时,如果不做时间截断,训练集里的“累计值”实际上包含了表现期之后的数据。我在排查一次AUC异常时才发现,训练代码里把全量数据一次性算特征,再切时间窗,中间忘了对累计特征做“只计算观察期之前”。这个问题不仔细看根本发现不了,因为特征的SQL能跑通,但逻辑是错的。
为了防范这类问题,我加了两个机制。一个是特征回溯测试:对同一批客户,用T-1天的数据和T-30天的数据分别算同一个特征,看差异是否在合理范围。另一个是“反向指标检查”:训练完成后,把模型预测得分最高的前100个客户的原始明细拉出来人工看一遍,确认这些客户确实符合业务直觉。如果模型最看好的“流失客户”全是莫名其妙的样本,那八成是泄漏了。
数据监控方面,我们建立了三类监控。第一类是数据质量监控,检查是否有字段大面积为空、主键冲突、数据延迟。第二类是特征分布监控,每3天跑一次特征分布统计,对比近90天均值,如果某个特征的分布突然发生了明显偏移,可能需要重新校正模型或检查上游数据。第三类是模型效果监控,线上每天统计预测得分分布和实际流失率,画出每日校准图。如果预测的平均得分在升高但实际流失率没变,说明模型可能过拟或者业务环境已经变化,需要尽快审查。
5.3 常见问题速查与解决实录
以下是我在项目中整理的几张“踩坑表”,分享出来。
| 问题现象 | 根因 | 解决办法 |
|---|---|---|
| 线上一测AUC比线下低0.1以上 | 特征泄漏 | 检查特征计算时间是否晚于观察期,重点排查累计型特征 |
| 模型预测的流失客户运营不认识 | 训练样本和时间窗口设置不合理,或特征里含特殊时段数据 | 检查样本分布,按月份可视化流失率 |
| 画像标签和CRM系统数字对不上 | 口径不一致,例如“近30天”按自然月算还是按滑动窗口算 | 统一口径文件,所有标签计算从配置中心读取口径定义 |
| 实时画像更新延迟超过5分钟 | Kafka消费积压,或Flink checkpoint超时 | 扩容消费者,排查慢算子,给Flink设置合理的barrier间隔 |
| ClickHouse查询慢 | 宽表字段太多,查询走了大量扫描 | 把高频查询字段建为主键稀疏索引,低频标签拆到二级表 |
| 模型上线一段时间后效果下滑 | 客户行为模式漂移,或产品改版影响数据分布 | 定期重训,增加时间衰减权重,保留最近90天样本 |
这个表只是一部分,但常见问题基本都集中在几个点:时间窗口、口径、特征一致性。
5.4 我最后想分享的几个实操经验
做这个画像引擎项目,我最大的一个感受是:工程上的难点从来不是某个模型有多复杂,而是如何让整个链路每天稳定运转、不出错。客户标签会因为上游字段名改掉而计算失败,模型会因为运营调整了活动策略而突然不准,这些都是日常要解决的事情,比调参和选模型消耗更多精力。
第一个经验:从第一天开始就建“数据字典”。每张表、每个字段、每个标签的口径变更,都要有记录。开始觉得是浪费时间,后面发现它其实是团队协作的粘合剂。没有数据字典的时候,每次做特征的同学和建标签的同学都要重新对齐口径,有了之后,两周一次的评审会直接变成“有没有需要更新的”这种小事。
第二个经验:先跑通一个最小闭环,再扩充标签。画像是很容易陷入“把标签做得很丰富”的冲动。但如果业务侧没有明确使用场景,做出来的标签只是数据仓库里的陈列品。我们的第一个闭环是做“高流失风险客户实时提醒”,模型、标签、API、客服工作台弹出提醒,只用了三个标签就完成了。跑通闭环之后,业务方愿意投入,才慢慢把标签体系做厚。
第三个经验:抓大放小,先解决“能救回来”的客户。流失预测模型最怕的不是预测不准,而是运营资源有限但名单太宽。我们后期做了一个简单的“流失价值分层”,在预测得分之外乘上客户历史生命周期价值,得到“决策优先级”。其实这个价值分层用不了多少算法,就是一个表连接,但它直接让运营的挽留成功率提升了一个档次。这提醒我,模型和工程始终是工具,真正解决问题的是把工具放到正确的业务流程里。
画像引擎做完了,但它实际上是永远做不完的。特征会变,业务会变,模型要不断迭代。如果后面继续扩展,我会把客户生命周期价值预测和推荐策略放进同一套框架里,让画像从“客户的过去”更多预测“客户的未来”。这几天团队已经在讨论要不要引入图计算来做客户关联,我虽然对图数据库还有运维层面的顾虑,但业务侧的同行们已经明确提出了“客户以群分”的分析需求,这可能就是下一个技术节点了。