You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于交易数据计算客户购物行为erraticism的0-1量化值

客户购物行为一致性指标聚合实现思路

以下方案均默认你已完成特征预处理:分类特征Gender需先做独热编码,避免直接输入数值1/2/3引入无意义的顺序权重,编码后与其余0-1型购物特征合并为相似度计算的特征集。


方案1:平均两两相似度(最常用,易解释)

原理

单客户n条交易记录可生成n*(n-1)/2组不重复的两两相似度,直接取所有相似度的均值作为一致性得分,天然落在0-1区间:

  • 所有记录完全一致时,所有两两相似度为1,得分=1
  • 所有记录完全不相似时,所有两两相似度为0,得分=0

代码实现

import numpy as np
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity

def calc_consistency_avg(cust_trx: pd.DataFrame, feat_cols: list) -> float:
    """
    cust_trx: 单个客户的所有交易记录
    feat_cols: 用于计算相似度的特征列名列表
    """
    trx_cnt = len(cust_trx)
    if trx_cnt < 2:
        # 仅1条交易默认一致性为1,可根据业务规则调整为0或其他值
        return 1.0
    # 计算两两相似度矩阵
    sim_matrix = cosine_similarity(cust_trx[feat_cols])
    # 提取上三角矩阵(排除对角线自身对自身的相似度1,避免重复计算正反序配对)
    valid_sim = sim_matrix[np.triu_indices_from(sim_matrix, k=1)]
    return valid_sim.mean()

方案2:分位数/最小值聚合(严格判断一致性)

原理

如果业务对"波动"的容忍度低,只要出现一次异常购物行为就判定一致性差,可以取所有两两相似度的最小值、10%分位数等作为得分,放大异常交易的影响。比如某客户9次购物完全一致,第10次完全不同,平均相似度可能还有0.8+,但最小值会直接降到0,更符合高波动的判定需求。

代码调整

仅需修改方案1的返回值即可:

# 取最小值
return valid_sim.min()
# 取10%分位数
return np.quantile(valid_sim, 0.1)

方案3:时间衰减加权相似度(适配有序交易序列)

原理

如果交易数据带有时间戳,行为一致性更偏向"近期行为是否稳定",可以给间隔更近的交易对更高权重,加权平均两两相似度。比如相邻两次交易的权重为1,间隔1次的权重为0.8,间隔越远权重越低,更贴合业务对"当前行为稳定性"的需求。


方案4:融合离散度的修正得分

原理

如果要区分"相似度都稳定在0.8"和"一半相似度1、一半相似度0.6"两种场景(两者平均相似度都是0.8,但前者一致性更高),可以引入相似度的离散度修正:

修正得分 = 平均相似度 * (1 - 相似度的变异系数)

变异系数=标准差/均值,值越大说明相似度波动越大,修正后得分会更低,最终结果仍保持在0-1区间。


内容的提问来源于stack exchange,提问作者Sajid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:36:04