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

如何识别周期性转账客户并生成转账金额与日期推荐

如何识别周期性转账客户并生成转账推荐?

给定包含id_customer(客户标识)、id_receiver(收款方标识)、money(转账金额)、date(转账日期)字段的数据集,我们可以通过以下步骤识别周期性转账的客户,并生成对应的转账金额与日期推荐:

步骤1:数据预处理

首先需要将整数格式的日期转换为可计算的datetime类型,同时清理字段名的冗余空格:

import pandas as pd

# 示例数据集
df = pd.DataFrame({
    'id_customer ': ['1', '1', '1'],
    'id_receiver ': ['A', 'A', 'B'],
    'date': [20230101, 20230201, 20230506],
    'money': [10,10,50] 
})

# 清理字段名末尾空格
df.columns = df.columns.str.strip()
# 转换日期格式为datetime
df['date'] = pd.to_datetime(df['date'], format='%Y%m%d')

步骤2:筛选有效分组

只有同一客户向同一收款方转账至少2次的分组,才具备判断周期性的基础,先筛选出这类分组:

# 过滤出转账次数≥2的客户-收款方组合
grouped = df.groupby(['id_customer', 'id_receiver']).filter(lambda x: len(x) >= 2)
# 重新分组用于后续计算
grouped = grouped.groupby(['id_customer', 'id_receiver'])

步骤3:识别周期性规律并生成推荐

对每个分组,验证两个核心规律:转账金额固定、转账时间间隔稳定(或符合月/周等周期特征),然后生成下一次转账的推荐:

def detect_and_recommend(group):
    # 按日期排序分组数据
    sorted_group = group.sort_values('date').reset_index(drop=True)
    
    # 检查转账金额是否完全一致
    is_amount_fixed = sorted_group['money'].nunique() == 1
    if not is_amount_fixed:
        return pd.Series({'next_date': pd.NaT, 'amount': None, 'is_periodic': False})
    
    # 计算相邻转账的日期间隔(天数)
    date_diffs = sorted_group['date'].diff().dropna().dt.days
    is_periodic = False
    next_date = pd.NaT
    
    # 判断是否为月周期(最常见的周期性转账场景)
    if all(28 <= diff <= 32 for diff in date_diffs):
        # 进一步验证每月转账日期是否一致(比如都是每月1号)
        if sorted_group['date'].dt.day.nunique() == 1:
            is_periodic = True
            # 推算下一次转账日期:最后一次转账日期加1个月
            next_date = sorted_group['date'].iloc[-1] + pd.DateOffset(months=1)
    # 判断是否为固定天数周期(比如每周/每15天转账)
    elif date_diffs.nunique() == 1:
        is_periodic = True
        period_days = date_diffs.iloc[0]
        next_date = sorted_group['date'].iloc[-1] + pd.Timedelta(days=period_days)
    
    return pd.Series({
        'next_transfer_date': next_date,
        'recommended_amount': sorted_group['money'].iloc[0] if is_periodic else None,
        'is_periodic': is_periodic
    })

# 应用函数到所有分组
recommendations = grouped.apply(detect_and_recommend).reset_index()

步骤4:查看有效推荐

筛选出符合周期性的推荐结果:

valid_recs = recommendations[recommendations['is_periodic']]
print(valid_recs)

针对示例数据集,输出结果为:

id_customer id_receiver next_transfer_date  recommended_amount  is_periodic
0           1           A         2023-03-01                  10         True

完全匹配需求:客户1每月1日向收款方A转账10欧元,推荐其2023年3月1日继续转账10欧元。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:10:14