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

如何基于JSON数组实现可扩展的消费者分群归类?

基于JSON数组实现消费者分群归类的方案

核心思路

  • 解析分群定义为通用规则集合,不硬编码分群名称,天然支持后续新增分群
  • 预处理消费者数据,将嵌套的type/value结构扁平化,简化条件判断流程
  • 编写通用匹配逻辑,遍历所有分群规则,逐一验证消费者属性是否符合分群要求

代码实现(Python)

import json

# 原始分群定义JSON
segment_def_json = '''
{"Segment_definitions":[{"segmentName":"S1","definition":{"a1":[19.0,25.0],"a2":["Seg2"]}},{"segmentName":"S2","definition":{"a4":[true,false],"a3":[4,6],"a1":[-1.0,21.0]}}]}
'''

# 原始消费者数据JSON
customers_json = '''
[
    {"a1":{"type":"Double","value":21.0},"a2":{"type":"string","value":"Seg1"},"a3":{"type":"Int","value":5},"a4":{"type":"Boolean","value":false}},
    {"a1":{"type":"Double","value":2.0},"a2":{"type":"string","value":"Seg2"},"a3":{"type":"Int","value":-1},"a4":{"type":"Boolean","value":true}}
]
'''

# 解析JSON数据
segment_defs = json.loads(segment_def_json)["Segment_definitions"]
customers = json.loads(customers_json)

# 预处理消费者数据:扁平化type/value结构
def preprocess_customer(customer):
    return {attr: detail["value"] for attr, detail in customer.items()}

processed_customers = [preprocess_customer(cust) for cust in customers]

# 单个分群匹配逻辑
def match_segment(customer, segment):
    rules = segment["definition"]
    for attr, condition in rules.items():
        # 消费者无该属性直接不匹配
        if attr not in customer:
            return False
        cust_val = customer[attr]
        # 区分区间规则和枚举列表规则
        if isinstance(condition, list):
            # 数值区间规则(列表含两个数值):左闭右闭
            if len(condition) == 2 and all(isinstance(x, (int, float)) for x in condition):
                min_val, max_val = condition
                if not (min_val <= cust_val <= max_val):
                    return False
            # 枚举规则(字符串/布尔值列表):值需在列表内
            else:
                if cust_val not in condition:
                    return False
    return True

# 获取消费者匹配的所有分群
def get_matched_segments(customer, segments):
    matched = []
    for seg in segments:
        if match_segment(customer, seg):
            matched.append(seg["segmentName"])
    return matched

# 执行匹配并输出结果
for idx, cust in enumerate(processed_customers, 1):
    matched = get_matched_segments(cust, segment_defs)
    print(f"消费者{idx}匹配分群:{matched}")

结果说明

  • 消费者1匹配分群:['S2'],满足S2的所有规则:a4值在枚举列表内、a3在4-6区间、a1在-1到21区间;不满足S1的a2规则(值为Seg1不在S1的a2列表内)
  • 消费者2无匹配分群:不满足S1的a1区间要求,也不满足S2的a3区间要求

扩展性说明

  • 新增分群:只需在Segment_definitions数组中添加新的分群对象,代码会自动遍历匹配,无需修改逻辑
  • 新增规则类型:如需支持字符串模糊匹配、数值大于/小于等规则,只需在match_segment函数中添加对应的条件判断分支即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:35:33