Przeglądaj źródła

根据新修改的数据,修改算法流程

杨泽宇 1 dzień temu
rodzic
commit
bc26caa16d

+ 3 - 1
.gitignore

@@ -1,4 +1,6 @@
 .idea/
 .vscode/
 __pycache__/
-*.pyc
+*.pyc
+data/
+models/rank/weights

+ 22 - 22
api_test.py

@@ -1,40 +1,40 @@
 import requests
 import json
 
-# url = "http://127.0.0.1:7960/brandcultivation/api/v1/recommend"
+url = "http://127.0.0.1:7960/brandcultivation/api/v1/recommend"
+payload = {
+    "city_uuid": "00000000000000000000000011445301",
+    "product_code": "440298",
+    "recall_cust_count": 1000,
+    "delivery_count": 2000,
+    "cultivacation_id": "10000001",
+    "limit_cycle_name": "202502W2(02.10-02.16)"
+}
+headers = {'Content-Type': 'application/json'}
+
+response = requests.post(url, data=json.dumps(payload), headers=headers)
+print(response.json())
+
+
+# url = "http://127.0.0.1:7960/brandcultivation/api/v1/report"
 # payload = {
-#     "city_uuid": "00000000000000000000000011445301",
-#     "product_code": "440298",
-#     "recall_cust_count": 1000,
-#     "delivery_count": 2000,
 #     "cultivacation_id": "10000001",
-#     "limit_cycle_name": "202502W2(02.10-02.16)"
 # }
 # headers = {'Content-Type': 'application/json'}
 
 # response = requests.post(url, data=json.dumps(payload), headers=headers)
 # print(response.json())
 
-
-# url = "http://127.0.0.1:7960/brandcultivation/api/v1/report"
+# url = "http://127.0.0.1:7960/brandcultivation/api/v1/eval_report"
 # payload = {
+#     "city_uuid": "00000000000000000000000011445301",
+#     "product_code": "440298",
 #     "cultivacation_id": "10000001",
+#     # "limit_cycle_name": "202502W2(02.10-02.16)"
+#     "start_time": "2025/2/10",
+#     "end_time": "2025/2/16"
 # }
 # headers = {'Content-Type': 'application/json'}
 
 # response = requests.post(url, data=json.dumps(payload), headers=headers)
 # print(response.json())
-
-url = "http://127.0.0.1:7960/brandcultivation/api/v1/eval_report"
-payload = {
-    "city_uuid": "00000000000000000000000011445301",
-    "product_code": "440298",
-    "cultivacation_id": "10000001",
-    # "limit_cycle_name": "202502W2(02.10-02.16)"
-    "start_time": "2025/2/10",
-    "end_time": "2025/2/16"
-}
-headers = {'Content-Type': 'application/json'}
-
-response = requests.post(url, data=json.dumps(payload), headers=headers)
-print(response.json())

+ 1 - 2
models/rank/data/__init__.py

@@ -1,11 +1,10 @@
-from models.rank.data.config import CustConfig, ProductConfig, OrderConfig, ShopConfig, ImportanceFeaturesMap, DeliveryConfig
+from models.rank.data.config import CustConfig, ProductConfig, OrderConfig, ImportanceFeaturesMap, DeliveryConfig
 from models.rank.data.dataloader import DataLoader
 from models.rank.data.utils import one_hot_embedding, sample_data_clear
 __all__ = [
     "CustConfig",
     "ProductConfig",
     "OrderConfig",
-    "ShopConfig",
     "DataLoader",
     "one_hot_embedding",
     "sample_data_clear",

+ 637 - 853
models/rank/data/config.py

@@ -1,854 +1,638 @@
-class CustConfig:
-    FEATURE_COLUMNS = [
-        "BB_RETAIL_CUSTOMER_CODE",              # 零售户代码
-        "BB_RTL_CUST_MARKET_TYPE_NAME",         # 零售户市场类型名称
-        "BB_RTL_CUST_BUSINESS_TYPE_NAME",       # 零售客户业态名称
-        "BB_RTL_CUST_CHAIN_FLAG",               # 零售户连锁标识
-        "MD04_MG_RTL_CUST_CREDITCLASS_NAME",    # 零售户信用等级名称
-        "MD04_DIR_SAL_STORE_FLAG",              # 直营店标识
-        "BB_CUSTOMER_MANAGER_SCOPE_NAME",       # 零售户经营范围名称
-        "BB_RTL_CUST_TERMINAL_LEVEL_NAME",      # 零售户终端层级名称
-        "OPERATOR_EDU",                         # 零售客户经营者文化程度
-        "STORE_AREA",                           # 店铺经营面积
-        "OPERATOR_AGE",                         # 经营者年龄
-        "PRODUCT_INSALE_QTY",                   # 在销品规数
-    ]
-    
-    ONEHOT_CAT = {
-        "BB_RTL_CUST_MARKET_TYPE_NAME":           ["城网", "农网"],
-        "BB_RTL_CUST_BUSINESS_TYPE_NAME":         ["便利店", "超市", "烟草专业店", "娱乐服务类", "其他"],
-        "BB_RTL_CUST_CHAIN_FLAG":                 ["是", "否"],
-        "MD04_MG_RTL_CUST_CREDITCLASS_NAME":      ["AAA", "AA", "A", "B", "C", "D"],
-        "MD04_DIR_SAL_STORE_FLAG":                ["是", "否"],
-        "BB_CUSTOMER_MANAGER_SCOPE_NAME":         ["是", "否"],
-        "BB_RTL_CUST_TERMINAL_LEVEL_NAME":        ["普通终端", "一般现代终端", "合作终端", "加盟终端", "直营终端"],
-        "OPERATOR_EDU":                           [1, 2, 3, 4, 5, 6, 7, "无数据"],
-        "STORE_AREA":                             ["0-20", "20-30", "30-40", "40-60", "60-80", "80-100", "100-120", "120以上"],
-        "OPERATOR_AGE":                           ["18-30", "31-40", "41-50", "51-65", "66-80", "80以上"],
-        "PRODUCT_INSALE_QTY":                     ["0-10", "11-20", "21-30", "31-40", "41-50", "51-60", 
-                                                   "61-70", "71-80", "81-90", "91-100", "101-110", "111-120", 
-                                                   "121-130", "131-140", "141-150", "151-160", "161-170", "171-180", 
-                                                   "181-190", "191-200", "201-210", "211-220", "221-230", "231-240", 
-                                                   "241-250", "251-260", "261-270", "271-280", "281-290", "291-350"],
-    }
-    
-    CLEANING_RULES = {
-        "BB_RTL_CUST_MARKET_TYPE_NAME":         {"method": "fillna", "opt": "fill", "value": "城网", "type": "str"},
-        "BB_RTL_CUST_BUSINESS_TYPE_NAME":       {"method": "fillna", "opt": "fill", "value": "其他", "type": "str"},
-        "BB_RTL_CUST_CHAIN_FLAG":               {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "MD04_MG_RTL_CUST_CREDITCLASS_NAME":    {"method": "fillna", "opt": "fill", "value": "B", "type": "str"},
-        "MD04_DIR_SAL_STORE_FLAG":              {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "BB_CUSTOMER_MANAGER_SCOPE_NAME":       {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "BB_RTL_CUST_TERMINAL_LEVEL_NAME":      {"method": "fillna", "opt": "fill", "value": "普通终端", "type": "str"},
-        "OPERATOR_EDU":                         {"method": "fillna", "opt": "fill", "value": "无数据", "type": "str"},
-        "STORE_AREA":                           {"method": "fillna", "opt": "fill", "value": "0-20", "type": "str"},
-        "OPERATOR_AGE":                         {"method": "fillna", "opt": "fill", "value": "31-40", "type": "str"},
-        "PRODUCT_INSALE_QTY":                   {"method": "fillna", "opt": "fill", "value": "0-10", "type": "str"},
-    }
-
-class ProductConfig:
-    FEATURE_COLUMNS = [
-        "product_code",                  # 商品编码
-        "factory_name",                  # 产地(工业公司名称)
-        "brand_name",                    # 品牌名称
-        "is_low_tar",                    # 低焦油卷烟
-        "is_medium",                     # 中支烟
-        "is_tiny",                       # 细支烟
-        "is_coarse",                     # 粗支烟(同时非中非细)
-        "is_exploding_beads",            # 爆珠烟
-        "is_abnormity",                  # 异形包装
-        "is_cig",                        # 雪茄烟
-        "is_chuangxin",                  # 创新品类
-        "direct_retail_price",           # 卷烟建议零售价
-        "tbc_total_length",              # 烟支总长度
-        "product_style",                 # 包装类型
-    ]
-    
-    ONEHOT_CAT = {
-        "factory_name":                    ["安徽中烟", "澳门云福卷烟厂", "北欧烟草集团", "博格集团", "重庆中烟", "川渝中烟", "菲利普莫里斯亚洲", 
-                                            "福建中烟", "甘肃工业", "广东中烟", "广西中烟", "贵州中烟", "海南红塔", "河北中烟", "河南中烟", 
-                                            "黑龙江工业", "红塔辽宁烟草", "湖北中烟", "湖南中烟", "吉林工业", "家源开发股份有限公司", 
-                                            "嘉莱赫国际有限公司", "江苏中烟", "江西中烟", "凯德控股有限公司", "力量雪茄烟草有限公司", 
-                                            "南洋兄弟烟草股份", "内蒙古昆明卷烟", "日本烟草(香港)有限公司", "三宝麟国际集团", "厦门调拨站", 
-                                            "山东中烟", "山西昆明烟草", "陕西中烟", "上海烟草(集团)公司", "上海烟草公司", "深圳工业", "四川中烟", 
-                                            "特富意烟草(国际)", "雪茄客烟草国际贸易有限公司", "耀莱雪茄控股有限公司", "引领国际有限公司", 
-                                            "英飞烽香港有限公司", "英美烟草中国有限公司", "云南中烟", "浙江中烟", "中茄国际贸易有限公司", 
-                                            "中烟英美烟草国际有限公司", "株式会社 KT&G", "无"],
-        "brand_name":                      ["万宝路", "555", "骆驼(国外)", "大华", "娇子", "大青山", "龙凤呈祥", "黄鹤楼", "真龙", "七匹狼", 
-                                            "芙蓉王", "双喜(广)", "贵烟", "钓鱼台", "红双喜(南洋)", "云烟", "蒙特", "富恩特", "拉·加莱拉", "苏烟", 
-                                            "丹纳曼", "黄山", "南京", "利群", "金桥", "泰山", "好日子", "石林", "美登", "红河", "嘉辉", "七星", 
-                                            "都彭", "天下秀", "长城", "高希霸", "钻石", "金圣", "王冠雪茄", "黄金叶", "中南海", "长白山", "红旗渠", 
-                                            "建牌", "大卫杜夫", "罗密欧", "茂大", "红金龙", "天子", "熊猫", "双喜(深)", "大前门", "兰州", 
-                                            "红双喜(沪)", "雄狮", "广州", "红玫王", "黄果树", "红塔山", "福", "小熊猫", "爱喜", "蒙特利", "玉溪", 
-                                            "都宝", "麦克纽杜", "卡里罗", "中华", "牡丹(沪)", "阿里山", "顺百利", "白沙", "羊城", "白云", 
-                                            "特美思", "国宾", "帕特加", "比德奥", "冬虫夏草", "威龙(湛江)", "香格里拉", "红梅", "延安", 
-                                            "特富意", "石狮", "金香港", "好猫", "登喜路", "乐迪", "林海灵芝", "椰树", "北京", "大红鹰", "大丰收", 
-                                            "红双喜(武汉)", "五叶神", "狮", "优民", "将军", "遵义", "恒大", "飞马", "红三环", "芙蓉", "工字", 
-                                            "古田", "狮牌", "君力", "哈尔滨", "梦都", "香梅(阜阳)", "哈德门", "梅州", "红山茶", "猴王", "沙龙", 
-                                            "潘趣", "狮子牌", "上海", "红玫", "醒宝", "广州湾", "百乐门", "关塔那摩", "威斯", "五一", "寿百年", 
-                                            "人民大会堂", "土楼", "三沙", "西湖", "光明", "阿诗玛", "宝亨", "恭贺新禧", "长寿", "茶花", "迎客松", 
-                                            "龙烟", "金澳门", "宝岛", "多米尼加之花", "国喜", "金驼", "君特欧", "上游", "幸福", "春城", "吉庆", 
-                                            "黄山松", "黄金龙", "紫气东来", "彼亚赛", "银辉", "潮牌", "庐山", "三峡", "壹支笔", "双叶", "无"],
-        "is_low_tar":                      ["是", "否"],
-        "is_medium":                       ["是", "否"],
-        "is_tiny":                         ["是", "否"],
-        "is_coarse":                       ["是", "否"],
-        "is_exploding_beads":              ["是", "否"],
-        "is_abnormity":                    ["是", "否"],
-        "is_cig":                          ["是", "否"],
-        "is_chuangxin":                    ["是", "否"],
-        "direct_retail_price":             ["0-5", "5-10", "10-15", "15-20", "20-26", "26-30", "30-40",
-                                            "40-50", "50-65", "65-80", "80-100", "100以上", "5-9.9", "10-19.9",
-                                            "20-29.9", "30-39.9", "40-49.9", "50-59.9", "60-69.9", "70-79.9", "80-89.9",
-                                            "90-99.9", "100-109.9", "110-119.9", "120-129.9", "130-139.9", "140-149.9",
-                                            "150-199.9", "200-249.9", "250-499.9", "500以上"],
-        "tbc_total_length":                ["小于79", "80-88", "89-100", "大于120"],
-        "product_style":                   ["条盒硬盒", "条包硬盒", "条盒软盒", "条包软盒", "铁盒", "其他"],
-    }
-    
-    CLEANING_RULES = {
-        "factory_name":          {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "brand_name":            {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "is_low_tar":            {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "is_medium":             {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "is_tiny":               {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "is_coarse":             {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "is_exploding_beads":    {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "is_abnormity":          {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "is_cig":                {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "is_chuangxin":          {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "direct_retail_price":   {"method": "fillna", "opt": "fill", "value": "0-5", "type": "str"},
-        "tbc_total_length":      {"method": "fillna", "opt": "fill", "value": "小于79", "type": "str"},
-        "product_style":         {"method": "fillna", "opt": "fill", "value": "其他", "type": "str"},
-    }
-
-class OrderConfig:
-    FEATURE_COLUMNS = [
-        "cust_code",                      # 零售户编码
-        "product_code",                   # 品牌规格编码
-        "sale_qty",                       # 销量包
-        # "sale_qty_l",                     # 销量上期
-        # "sale_qty_hb",                    # 销量环比
-        # "sale_amt",                       # 销售额包
-    ]
-    
-class ShopConfig:
-    FEATURE_COLUMNS = [
-        "cust_code",                      # 客户编码
-        "r_home_num",                     # 常驻人口_居住人数
-        "r_work_num",                     # 常驻人口_工作人数
-        "r_resident_num",                 # 常驻人口_工作或居住人数
-        "r_urban_cons_middle",            # 常驻人口_城市消费水平_中
-        "r_urban_cons_low",               # 常驻人口_城市消费水平_低
-        "r_urban_cons_lower",             # 常驻人口_城市消费水平_次低
-        "r_urban_cons_secondhigh",        # 常驻人口_城市消费水平_次高
-        "r_urban_cons_high",              # 常驻人口_城市消费水平_高
-        "r_edu_junior_middle",            # 常驻人口_学历_初中
-        "r_edu_doctor",                   # 常驻人口_学历_博士
-        "r_edu_specialty",                # 常驻人口_学历_大专
-        "r_edu_primary",                  # 常驻人口_学历_小学
-        "r_edu_college",                  # 常驻人口_学历_本科
-        "r_edu_postgraduate",             # 常驻人口_学历_硕士
-        "r_edu_senior_middle",            # 常驻人口_学历_高中
-        "r_house_price79999",             # 常驻人口_居住社区房价_60000_79999
-        "r_house_price59999",             # 常驻人口_居住社区房价_40000_59999
-        "r_house_price39999",             # 常驻人口_居住社区房价_20000_39999
-        "r_house_price19999",             # 常驻人口_居住社区房价_10000_19999
-        "r_house_price9999",              # 常驻人口_居住社区房价_8000_9999
-        "r_house_price7999",              # 常驻人口_居住社区房价_5000_7999
-        "r_house_price4999",              # 常驻人口_居住社区房价_2000_4999
-        "r_age_17",                       # 常驻人口_年龄_0_17
-        "r_age_24",                       # 常驻人口_年龄_18_24
-        "r_age_30",                       # 常驻人口_年龄_25_30
-        "r_age_35",                       # 常驻人口_年龄_31_35
-        "r_age_40",                       # 常驻人口_年龄_36_40
-        "r_age_45",                       # 常驻人口_年龄_41_45
-        "r_age_60",                       # 常驻人口_年龄_46_60
-        "r_age_over_60",                  # 常驻人口_年龄_61以上
-        "r_sex_woman",                    # 常驻人口_性别_女
-        "r_sex_man",                      # 常驻人口_性别_男
-        "r_catering_50",                  # 常驻人口_餐饮消费水平_50
-        "r_catering_100",                 # 常驻人口_餐饮消费水平_100
-        "r_catering_150",                 # 常驻人口_餐饮消费水平_150
-        "r_catering_200",                 # 常驻人口_餐饮消费水平_200
-        "r_catering_500",                 # 常驻人口_餐饮消费水平_500
-        "r_catering_over_500",            # 常驻人口_餐饮消费水平_500以上
-        "r_catering_times_2",             # 常驻人口_餐饮消费频次_1_2
-        "r_catering_times_4",             # 常驻人口_餐饮消费频次_2_4
-        "r_catering_times_6",             # 常驻人口_餐饮消费频次_4_6
-        "r_catering_times_8",             # 常驻人口_餐饮消费频次_6_8
-        "r_catering_times_10",            # 常驻人口_餐饮消费频次_8_10
-        "r_catering_times_11",            # 常驻人口_餐饮消费频次_11以上
-        "r_native_beijing",               # 常驻人口_家乡地_北京市
-        "r_native_tianjing",              # 常驻人口_家乡地_天津市
-        "r_native_hebei",                 # 常驻人口_家乡地_河北省
-        "r_native_shanxi",                # 常驻人口_家乡地_山西省
-        "r_native_neimeng",               # 常驻人口_家乡地_内蒙古
-        "r_native_liaoning",              # 常驻人口_家乡地_辽宁省
-        "r_native_jilin",                 # 常驻人口_家乡地_吉林省
-        "r_native_heilongjiang",          # 常驻人口_家乡地_黑龙江省
-        "r_native_shanghai",              # 常驻人口_家乡地_上海市
-        "r_native_jiangsu",               # 常驻人口_家乡地_江苏省
-        "r_native_zhejiang",              # 常驻人口_家乡地_浙江省
-        "r_native_anhui",                 # 常驻人口_家乡地_安徽省
-        "r_native_fujian",                # 常驻人口_家乡地_福建省
-        "r_native_jiangix",               # 常驻人口_家乡地_江西省
-        "r_native_shandong",              # 常驻人口_家乡地_山东省
-        "r_native_henan",                 # 常驻人口_家乡地_河南省
-        "r_native_hubei",                 # 常驻人口_家乡地_湖北省
-        "r_native_hunan",                 # 常驻人口_家乡地_湖南省
-        "r_native_guangdong",             # 常驻人口_家乡地_广东省
-        "r_native_hainan",                # 常驻人口_家乡地_海南省
-        "r_native_sichuan",               # 常驻人口_家乡地_四川省
-        "r_native_guizhou",               # 常驻人口_家乡地_贵州省
-        "r_native_yunnan",                # 常驻人口_家乡地_云南省
-        "r_native_shan",                  # 常驻人口_家乡地_陕西省
-        "r_native_gansu",                 # 常驻人口_家乡地_甘肃省
-        "r_native_qinghai",               # 常驻人口_家乡地_青海省
-        "r_native_guangxi",               # 常驻人口_家乡地_广西壮族自治区
-        "r_native_ningxia",               # 常驻人口_家乡地_宁夏回族自治区
-        "r_native_xinjiang",              # 常驻人口_家乡地_新疆维吾尔自治区
-        "r_native_xizang",                # 常驻人口_家乡地_西藏自治区
-        "r_native_chongqing",             # 常驻人口_家乡地_重庆市
-        "r_native_hongkong",              # 常驻人口_家乡地_香港
-        "r_native_macao",                 # 常驻人口_家乡地_澳门
-        "r_native_taiwan",                # 常驻人口_家乡地_台湾
-        "r_native_other",                 # 常驻人口_家乡地_其它
-        "f_flow_num",                     # 流动人口_工作日_日均流动人口数量
-        "f_holiday_flow_num",             # 流动人口_节假日_日均流动人口数量
-        "f_workday_flow_num",             # 流动人口_日均流动人口数量
-        "f_flowurban_cons_middle",        # 日均流动_城市消费水平_中
-        "f_flowurban_cons_low",           # 日均流动_城市消费水平_低
-        "f_flowurban_cons_lower",         # 日均流动_城市消费水平_次低
-        "f_flowurban_cons_second_high",   # 日均流动_城市消费水平_次高
-        "f_flowurban_cons_high",          # 日均流动_城市消费水平_高
-        "f_flowedu_junior_middle",        # 日均流动_学历_初中
-        "f_flowedu_doctor",               # 日均流动_学历_博士
-        "f_flowedu_specialty",            # 日均流动_学历_大专
-        "f_flowedu_primary",              # 日均流动_学历_小学
-        "f_flowedu_college",              # 日均流动_学历_本科
-        "f_flowedu_postgraduate",         # 日均流动_学历_硕士
-        "f_flowedu_senior_middle",        # 日均流动_学历_高中
-        "f_flowhouse_middle",             # 日均流动_居住社区房价_中
-        "f_flowhouse_low",                # 日均流动_居住社区房价_低
-        "f_flowhouse_lower",              # 日均流动_居住社区房价_次低
-        "f_flowhouse_second_high",        # 日均流动_居住社区房价_次高
-        "f_flowhouse_high",               # 日均流动_居住社区房价_高
-        "f_flowage_17",                   # 日均流动_年龄_0_17
-        "f_flowage_24",                   # 日均流动_年龄_18_24
-        "f_flowage_30",                   # 日均流动_年龄_25_30
-        "f_flowage_35",                   # 日均流动_年龄_31_35
-        "f_flowage_40",                   # 日均流动_年龄_36_40
-        "f_flowage_45",                   # 日均流动_年龄_41_45
-        "f_flowage_60",                   # 日均流动_年龄_46_60
-        "f_flowage_over_60",              # 日均流动_年龄_61以上
-        "f_flowsex_woman",                # 日均流动_性别_女
-        "f_flowsex_man",                  # 日均流动_性别_男
-        "f_holidayurban_cons_middle",     # 节假日流动_城市消费水平_中
-        "f_holidayurban_cons_low",        # 节假日流动_城市消费水平_低
-        "f_holidayurban_cons_lower",      # 节假日流动_城市消费水平_次低
-        "f_holidayurban_cons_secondhigh", # 节假日流动_城市消费水平_次高
-        "f_holidayurban_cons_high",       # 节假日流动_城市消费水平_高
-        "f_holidayedu_junior_middle",     # 节假日流动_学历_初中
-        "f_holidayedu_doctor",            # 节假日流动_学历_博士
-        "f_holidayedu_specialty",         # 节假日流动_学历_大专
-        "f_holidayedu_primary",           # 节假日流动_学历_小学
-        "f_holidayedu_college",           # 节假日流动_学历_本科
-        "f_holidayedu_postgraduate",      # 节假日流动_学历_硕士
-        "f_holidayedu_senior_middle",     # 节假日流动_学历_高中
-        "f_holidayhouse_middle",          # 节假日流动_居住社区房价_中
-        "f_holidayhouse_low",             # 节假日流动_居住社区房价_低
-        "f_holidayhouse_lower",           # 节假日流动_居住社区房价_次低
-        "f_holidayhouse_second_high",     # 节假日流动_居住社区房价_次高
-        "f_holidayhouse_high",            # 节假日流动_居住社区房价_高
-        "f_holidayage_17",                # 节假日流动_年龄_0_17
-        "f_holidayage_24",                # 节假日流动_年龄_18_24
-        "f_holidayage_30",                # 节假日流动_年龄_25_30
-        "f_holidayage_35",                # 节假日流动_年龄_31_35
-        "f_holidayage_40",                # 节假日流动_年龄_36_40
-        "f_holidayage_45",                # 节假日流动_年龄_41_45
-        "f_holidayage_60",                # 节假日流动_年龄_46_60
-        "f_holidayage_over_60",           # 节假日流动_年龄_61以上
-        "f_holidaysex_woman",             # 节假日流动_性别_女
-        "f_holidaysex_man",               # 节假日流动_性别_男
-        "f_workday_urban_cons_middle",    # 工作日流动_城市消费水平_中
-        "f_workday_urban_cons_low",       # 工作日流动_城市消费水平_低
-        "f_workday_urban_cons_lower",     # 工作日流动_城市消费水平_次低
-        "f_workday_urban_cons_secondhigh",# 工作日流动_城市消费水平_次高
-        "f_workday_urban_cons_high",      # 工作日流动_城市消费水平_高
-        "f_workday_edu_junior_middle",    # 工作日流动_学历_初中
-        "f_workday_edu_doctor",           # 工作日流动_学历_博士
-        "f_workday_edu_specialty",        # 工作日流动_学历_大专
-        "f_workday_edu_primary",          # 工作日流动_学历_小学
-        "f_workday_edu_college",          # 工作日流动_学历_本科
-        "f_workday_edu_postgraduate",     # 工作日流动_学历_硕士
-        "f_workday_edu_senior_middle",    # 工作日流动_学历_高中
-        "f_workday_house_middle",         # 工作日流动_居住社区房价_中
-        "f_workday_house_low",            # 工作日流动_居住社区房价_低
-        "f_workday_house_lower",          # 工作日流动_居住社区房价_次低
-        "f_workday_house_second_high",    # 工作日流动_居住社区房价_次高
-        "f_workday_house_high",           # 工作日流动_居住社区房价_高
-        "f_workday_age_17",               # 工作日流动_年龄_0_17
-        "f_workday_age_24",               # 工作日流动_年龄_18_24
-        "f_workday_age_30",               # 工作日流动_年龄_25_30
-        "f_workday_age_35",               # 工作日流动_年龄_31_35
-        "f_workday_age_40",               # 工作日流动_年龄_36_40
-        "f_workday_age_45",               # 工作日流动_年龄_41_45
-        "f_workday_age_60",               # 工作日流动_年龄_46_60
-        "f_workday_age_over_60",          # 工作日流动_年龄_61以上
-        "f_workday_sex_woman",            # 工作日流动_性别_女
-        "f_workday_sex_man",              # 工作日流动_性别_男
-    ]
-    
-    ONEHOT_CAT = {
-        "r_home_num":                        ["0-100", "101-500", "501-2000", "2001-5000", "5001-10000", "10000以上"],
-        "r_work_num":                        ["0-100", "101-500", "501-2000", "2001-5000", "5001-10000", "10000以上"],
-        "r_resident_num":                    ["0-100", "101-500", "501-2000", "2001-5000", "5001-10000", "10001-20000", "20000以上"],
-        "r_urban_cons_middle":               ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_urban_cons_low":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_urban_cons_lower":                ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_urban_cons_secondhigh":           ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_urban_cons_high":                 ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_edu_junior_middle":               ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_edu_doctor":                      ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_edu_specialty":                   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_edu_primary":                     ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_edu_college":                     ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_edu_postgraduate":                ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_edu_senior_middle":               ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_house_price79999":                ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_house_price59999":                ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_house_price39999":                ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_house_price19999":                ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_house_price9999":                 ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_house_price7999":                 ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_house_price4999":                 ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_age_17":                          ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_age_24":                          ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_age_30":                          ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_age_35":                          ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_age_40":                          ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_age_45":                          ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_age_60":                          ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_age_over_60":                     ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_sex_woman":                       ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_sex_man":                         ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_catering_50":                     ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_catering_100":                    ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_catering_150":                    ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_catering_200":                    ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_catering_500":                    ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_catering_over_500":               ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_catering_times_2":                ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_catering_times_4":                ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_catering_times_6":                ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_catering_times_8":                ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_catering_times_10":               ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_catering_times_11":               ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_beijing":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_tianjing":                 ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_hebei":                    ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_shanxi":                   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_neimeng":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_liaoning":                 ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_jilin":                    ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_heilongjiang":             ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_shanghai":                 ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_jiangsu":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_zhejiang":                 ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_anhui":                    ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_fujian":                   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_jiangix":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_shandong":                 ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_henan":                    ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_hubei":                    ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_hunan":                    ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_guangdong":                ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_hainan":                   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_sichuan":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_guizhou":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_yunnan":                   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_shan":                     ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_gansu":                    ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_qinghai":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_guangxi":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_ningxia":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_xinjiang":                 ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_xizang":                   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_chongqing":                ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_hongkong":                 ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_macao":                    ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_taiwan":                   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "r_native_other":                    ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flow_num":                        ["0-100", "101-500", "501-2000", "2001-5000", "5001-10000", "10001-50000", "50001-100000", "100000以上"],
-        "f_holiday_flow_num":                ["0-100", "101-500", "501-2000", "2001-5000", "5001-10000", "10001-50000", "50001-100000", "100000以上"],
-        "f_workday_flow_num":                ["0-100", "101-500", "501-2000", "2001-5000", "5001-10000", "10001-50000", "50001-100000", "100000以上"],
-        "f_flowurban_cons_middle":           ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowurban_cons_low":              ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowurban_cons_lower":            ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowurban_cons_second_high":      ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowurban_cons_high":             ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowedu_junior_middle":           ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowedu_doctor":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowedu_specialty":               ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowedu_primary":                 ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowedu_college":                 ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowedu_postgraduate":            ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowedu_senior_middle":           ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowhouse_middle":                ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowhouse_low":                   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowhouse_lower":                 ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowhouse_second_high":           ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowhouse_high":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowage_17":                      ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowage_24":                      ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowage_30":                      ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowage_35":                      ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowage_40":                      ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowage_45":                      ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowage_60":                      ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowage_over_60":                 ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowsex_woman":                   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_flowsex_man":                     ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayurban_cons_middle":        ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayurban_cons_low":           ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayurban_cons_lower":         ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayurban_cons_secondhigh":    ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayurban_cons_high":          ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayedu_junior_middle":        ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayedu_doctor":               ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayedu_specialty":            ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayedu_primary":              ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayedu_college":              ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayedu_postgraduate":         ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayedu_senior_middle":        ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayhouse_middle":             ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayhouse_low":                ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayhouse_lower":              ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayhouse_second_high":        ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayhouse_high":               ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayage_17":                   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayage_24":                   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayage_30":                   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayage_35":                   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayage_40":                   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayage_45":                   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayage_60":                   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidayage_over_60":              ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidaysex_woman":                ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_holidaysex_man":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_urban_cons_middle":       ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_urban_cons_low":          ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_urban_cons_lower":        ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_urban_cons_secondhigh":   ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_urban_cons_high":         ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_edu_junior_middle":       ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_edu_doctor":              ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_edu_specialty":           ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_edu_primary":             ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_edu_college":             ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_edu_postgraduate":        ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_edu_senior_middle":       ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_house_middle":            ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_house_low":               ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_house_lower":             ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_house_second_high":       ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_house_high":              ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_age_17":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_age_24":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_age_30":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_age_35":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_age_40":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_age_45":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_age_60":                  ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_age_over_60":             ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_sex_woman":               ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-        "f_workday_sex_man":                 ["0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"],
-    }
-    
-    CLEANING_RULES = {
-        "r_home_num":                    {"method": "fillna", "opt": "fill", "value": "501-2000", "type": "str"},
-        "r_work_num":                    {"method": "fillna", "opt": "fill", "value": "501-2000", "type": "str"},
-        "r_resident_num":                {"method": "fillna", "opt": "fill", "value": "501-2000", "type": "str"},
-        "r_urban_cons_middle":           {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_urban_cons_low":              {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_urban_cons_lower":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_urban_cons_secondhigh":       {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_urban_cons_high":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_edu_junior_middle":           {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_edu_doctor":                  {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_edu_specialty":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_edu_primary":                 {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_edu_college":                 {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_edu_postgraduate":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_edu_senior_middle":           {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_house_price79999":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_house_price59999":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_house_price39999":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_house_price19999":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_house_price9999":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_house_price7999":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_house_price4999":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_age_17":                      {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_age_24":                      {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_age_30":                      {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_age_35":                      {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_age_40":                      {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_age_45":                      {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_age_60":                      {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_age_over_60":                 {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_sex_woman":                   {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_sex_man":                     {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_catering_50":                 {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_catering_100":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_catering_150":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_catering_200":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_catering_500":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_catering_over_500":           {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_catering_times_2":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_catering_times_4":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_catering_times_6":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_catering_times_8":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_catering_times_10":           {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_catering_times_11":           {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_beijing":              {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_tianjing":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_hebei":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_shanxi":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_neimeng":              {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_liaoning":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_jilin":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_heilongjiang":         {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_shanghai":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_jiangsu":              {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_zhejiang":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_anhui":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_fujian":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_jiangix":              {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_shandong":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_henan":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_hubei":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_hunan":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_guangdong":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_hainan":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_sichuan":              {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_guizhou":              {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_yunnan":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_shan":                 {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_gansu":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_qinghai":              {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_guangxi":              {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_ningxia":              {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_xinjiang":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_xizang":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_chongqing":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_hongkong":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_macao":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_taiwan":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "r_native_other":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flow_num":                    {"method": "fillna", "opt": "fill", "value": "2001-5000", "type": "str"},
-        "f_holiday_flow_num":            {"method": "fillna", "opt": "fill", "value": "2001-5000", "type": "str"},
-        "f_workday_flow_num":            {"method": "fillna", "opt": "fill", "value": "2001-5000", "type": "str"},
-        "f_flowurban_cons_middle":       {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowurban_cons_low":          {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowurban_cons_lower":        {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowurban_cons_second_high":  {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowurban_cons_high":         {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowedu_junior_middle":       {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowedu_doctor":              {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowedu_specialty":           {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowedu_primary":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowedu_college":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowedu_postgraduate":        {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowedu_senior_middle":       {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowhouse_middle":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowhouse_low":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowhouse_lower":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowhouse_second_high":       {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowhouse_high":              {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowage_17":                  {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowage_24":                  {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowage_30":                  {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowage_35":                  {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowage_40":                  {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowage_45":                  {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowage_60":                  {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowage_over_60":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowsex_woman":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_flowsex_man":                 {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayurban_cons_middle":    {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayurban_cons_low":       {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayurban_cons_lower":     {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayurban_cons_secondhigh": {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayurban_cons_high":      {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayedu_junior_middle":    {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayedu_doctor":           {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayedu_specialty":        {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayedu_primary":          {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayedu_college":          {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayedu_postgraduate":     {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayedu_senior_middle":    {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayhouse_middle":         {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayhouse_low":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayhouse_lower":          {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayhouse_second_high":    {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayhouse_high":           {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayage_17":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayage_24":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayage_30":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayage_35":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayage_40":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayage_45":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayage_60":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidayage_over_60":          {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidaysex_woman":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_holidaysex_man":              {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_urban_cons_middle":     {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_urban_cons_low":        {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_urban_cons_lower":      {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_urban_cons_secondhigh": {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_urban_cons_high":       {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_edu_junior_middle":     {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_edu_doctor":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_edu_specialty":         {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_edu_primary":           {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_edu_college":           {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_edu_postgraduate":      {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_edu_senior_middle":     {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_house_middle":          {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_house_low":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_house_lower":           {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_house_second_high":     {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_house_high":            {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_age_17":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_age_24":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_age_30":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_age_35":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_age_40":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_age_45":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_age_60":                {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_age_over_60":           {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_sex_woman":             {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-        "f_workday_sex_man":               {"method": "fillna", "opt": "fill", "value": "40-50", "type": "str"},
-    }
-
-class ImportanceFeaturesMap:
-    CUSTOM_FEATURES_MAP = {
-        "BB_RTL_CUST_MARKET_TYPE_NAME":         "零售户市场类型名称",
-        "BB_RTL_CUST_BUSINESS_TYPE_NAME":       "零售客户业态名称",
-        "BB_RTL_CUST_CHAIN_FLAG":               "零售户连锁标识",
-        "MD04_MG_RTL_CUST_CREDITCLASS_NAME":    "零售户信用等级名称",
-        "MD04_DIR_SAL_STORE_FLAG":              "直营店标识",
-        "BB_CUSTOMER_MANAGER_SCOPE_NAME":       "零售户经营范围名称",
-        "BB_RTL_CUST_TERMINAL_LEVEL_NAME":      "零售户终端层级名称",
-        "OPERATOR_EDU":                         "零售客户经营者文化程度",
-        "STORE_AREA":                           "店铺经营面积",
-        "OPERATOR_AGE":                         "经营者年龄",
-        "PRODUCT_INSALE_QTY":                   "在销品规数",
-    }
-    
-    PRODUCT_FEATRUES_MAP = {
-        "factory_name":              "产地",
-        "brand_name":                "品牌名称",
-        "is_low_tar":                "低焦油卷烟",
-        "is_medium":                 "中支烟",
-        "is_tiny":                   "细支烟",
-        "is_coarse":                 "粗支烟",
-        "is_exploding_beads":        "爆珠烟",
-        "is_abnormity":              "异形包装",
-        "is_cig":                    "雪茄烟",
-        "is_chuangxin":              "创新品类",
-        "direct_retail_price":       "卷烟建议零售价",
-        "tbc_total_length":          "烟支总长度",
-        "product_style":             "包装类型",
-    }
-    
-    SHOPING_FEATURES_MAP = {
-        "r_home_num":                          "常驻人口_居住人数",
-        "r_work_num":                          "常驻人口_工作人数",
-        "r_resident_num":                      "常驻人口_工作或居住人数",
-        "r_urban_cons_middle":                 "常驻人口_城市消费水平_中",
-        "r_urban_cons_low":                    "常驻人口_城市消费水平_低",
-        "r_urban_cons_lower":                  "常驻人口_城市消费水平_次低",
-        "r_urban_cons_secondhigh":             "常驻人口_城市消费水平_次高",
-        "r_urban_cons_high":                   "常驻人口_城市消费水平_高",
-        "r_edu_junior_middle":                 "常驻人口_学历_初中",
-        "r_edu_doctor":                        "常驻人口_学历_博士",
-        "r_edu_specialty":                     "常驻人口_学历_大专",
-        "r_edu_primary":                       "常驻人口_学历_小学",
-        "r_edu_college":                       "常驻人口_学历_本科",
-        "r_edu_postgraduate":                  "常驻人口_学历_硕士",
-        "r_edu_senior_middle":                 "常驻人口_学历_高中",
-        "r_house_price79999":                  "常驻人口_居住社区房价_60000_79999",
-        "r_house_price59999":                  "常驻人口_居住社区房价_40000_59999",
-        "r_house_price39999":                  "常驻人口_居住社区房价_20000_39999",
-        "r_house_price19999":                  "常驻人口_居住社区房价_10000_19999",
-        "r_house_price9999":                   "常驻人口_居住社区房价_8000_9999",
-        "r_house_price7999":                   "常驻人口_居住社区房价_5000_7999",
-        "r_house_price4999":                   "常驻人口_居住社区房价_2000_4999",
-        "r_age_17":                            "常驻人口_年龄_0_17",
-        "r_age_24":                            "常驻人口_年龄_18_24",
-        "r_age_30":                            "常驻人口_年龄_25_30",
-        "r_age_35":                            "常驻人口_年龄_31_35",
-        "r_age_40":                            "常驻人口_年龄_36_40",
-        "r_age_45":                            "常驻人口_年龄_41_45",
-        "r_age_60":                            "常驻人口_年龄_46_60",
-        "r_age_over_60":                       "常驻人口_年龄_61以上",
-        "r_sex_woman":                         "常驻人口_性别_女",
-        "r_sex_man":                           "常驻人口_性别_男",
-        "r_catering_50":                       "常驻人口_餐饮消费水平_50",
-        "r_catering_100":                      "常驻人口_餐饮消费水平_100",
-        "r_catering_150":                      "常驻人口_餐饮消费水平_150",
-        "r_catering_200":                      "常驻人口_餐饮消费水平_200",
-        "r_catering_500":                      "常驻人口_餐饮消费水平_500",
-        "r_catering_over_500":                 "常驻人口_餐饮消费水平_500以上",
-        "r_catering_times_2":                  "常驻人口_餐饮消费频次_1_2",
-        "r_catering_times_4":                  "常驻人口_餐饮消费频次_2_4",
-        "r_catering_times_6":                  "常驻人口_餐饮消费频次_4_6",
-        "r_catering_times_8":                  "常驻人口_餐饮消费频次_6_8",
-        "r_catering_times_10":                 "常驻人口_餐饮消费频次_8_10",
-        "r_catering_times_11":                 "常驻人口_餐饮消费频次_11以上",
-        "r_native_beijing":                    "常驻人口_家乡地_北京市",
-        "r_native_tianjing":                   "常驻人口_家乡地_天津市",
-        "r_native_hebei":                      "常驻人口_家乡地_河北省",
-        "r_native_shanxi":                     "常驻人口_家乡地_山西省",
-        "r_native_neimeng":                    "常驻人口_家乡地_内蒙古",
-        "r_native_liaoning":                   "常驻人口_家乡地_辽宁省",
-        "r_native_jilin":                      "常驻人口_家乡地_吉林省",
-        "r_native_heilongjiang":               "常驻人口_家乡地_黑龙江省",
-        "r_native_shanghai":                   "常驻人口_家乡地_上海市",
-        "r_native_jiangsu":                    "常驻人口_家乡地_江苏省",
-        "r_native_zhejiang":                   "常驻人口_家乡地_浙江省",
-        "r_native_anhui":                      "常驻人口_家乡地_安徽省",
-        "r_native_fujian":                     "常驻人口_家乡地_福建省",
-        "r_native_jiangix":                    "常驻人口_家乡地_江西省",
-        "r_native_shandong":                   "常驻人口_家乡地_山东省",
-        "r_native_henan":                      "常驻人口_家乡地_河南省",
-        "r_native_hubei":                      "常驻人口_家乡地_湖北省",
-        "r_native_hunan":                      "常驻人口_家乡地_湖南省",
-        "r_native_guangdong":                  "常驻人口_家乡地_广东省",
-        "r_native_hainan":                     "常驻人口_家乡地_海南省",
-        "r_native_sichuan":                    "常驻人口_家乡地_四川省",
-        "r_native_guizhou":                    "常驻人口_家乡地_贵州省",
-        "r_native_yunnan":                     "常驻人口_家乡地_云南省",
-        "r_native_shan":                       "常驻人口_家乡地_陕西省",
-        "r_native_gansu":                      "常驻人口_家乡地_甘肃省",
-        "r_native_qinghai":                    "常驻人口_家乡地_青海省",
-        "r_native_guangxi":                    "常驻人口_家乡地_广西壮族自治区",
-        "r_native_ningxia":                    "常驻人口_家乡地_宁夏回族自治区",
-        "r_native_xinjiang":                   "常驻人口_家乡地_新疆维吾尔自治区",
-        "r_native_xizang":                     "常驻人口_家乡地_西藏自治区",
-        "r_native_chongqing":                  "常驻人口_家乡地_重庆市",
-        "r_native_hongkong":                   "常驻人口_家乡地_香港",
-        "r_native_macao":                      "常驻人口_家乡地_澳门",
-        "r_native_taiwan":                     "常驻人口_家乡地_台湾",
-        "r_native_other":                      "常驻人口_家乡地_其它",
-        "f_flow_num":                          "流动人口_工作日_日均流动人口数量",
-        "f_holiday_flow_num":                  "流动人口_节假日_日均流动人口数量",
-        "f_workday_flow_num":                  "流动人口_日均流动人口数量",
-        "f_flowurban_cons_middle":             "日均流动_城市消费水平_中",
-        "f_flowurban_cons_low":                "日均流动_城市消费水平_低",
-        "f_flowurban_cons_lower":              "日均流动_城市消费水平_次低",
-        "f_flowurban_cons_second_high":        "日均流动_城市消费水平_次高",
-        "f_flowurban_cons_high":               "日均流动_城市消费水平_高",
-        "f_flowedu_junior_middle":             "日均流动_学历_初中",
-        "f_flowedu_doctor":                    "日均流动_学历_博士",
-        "f_flowedu_specialty":                 "日均流动_学历_大专",
-        "f_flowedu_primary":                   "日均流动_学历_小学",
-        "f_flowedu_college":                   "日均流动_学历_本科",
-        "f_flowedu_postgraduate":              "日均流动_学历_硕士",
-        "f_flowedu_senior_middle":             "日均流动_学历_高中",
-        "f_flowhouse_middle":                  "日均流动_居住社区房价_中",
-        "f_flowhouse_low":                     "日均流动_居住社区房价_低",
-        "f_flowhouse_lower":                   "日均流动_居住社区房价_次低",
-        "f_flowhouse_second_high":             "日均流动_居住社区房价_次高",
-        "f_flowhouse_high":                    "日均流动_居住社区房价_高",
-        "f_flowage_17":                        "日均流动_年龄_0_17",
-        "f_flowage_24":                        "日均流动_年龄_18_24",
-        "f_flowage_30":                        "日均流动_年龄_25_30",
-        "f_flowage_35":                        "日均流动_年龄_31_35",
-        "f_flowage_40":                        "日均流动_年龄_36_40",
-        "f_flowage_45":                        "日均流动_年龄_41_45",
-        "f_flowage_60":                        "日均流动_年龄_46_60",
-        "f_flowage_over_60":                   "日均流动_年龄_61以上",
-        "f_flowsex_woman":                     "日均流动_性别_女",
-        "f_flowsex_man":                       "日均流动_性别_男",
-        "f_holidayurban_cons_middle":          "节假日流动_城市消费水平_中",
-        "f_holidayurban_cons_low":             "节假日流动_城市消费水平_低",
-        "f_holidayurban_cons_lower":           "节假日流动_城市消费水平_次低",
-        "f_holidayurban_cons_secondhigh":      "节假日流动_城市消费水平_次高",
-        "f_holidayurban_cons_high":            "节假日流动_城市消费水平_高",
-        "f_holidayedu_junior_middle":          "节假日流动_学历_初中",
-        "f_holidayedu_doctor":                 "节假日流动_学历_博士",
-        "f_holidayedu_specialty":              "节假日流动_学历_大专",
-        "f_holidayedu_primary":                "节假日流动_学历_小学",
-        "f_holidayedu_college":                "节假日流动_学历_本科",
-        "f_holidayedu_postgraduate":           "节假日流动_学历_硕士",
-        "f_holidayedu_senior_middle":          "节假日流动_学历_高中",
-        "f_holidayhouse_middle":               "节假日流动_居住社区房价_中",
-        "f_holidayhouse_low":                  "节假日流动_居住社区房价_低",
-        "f_holidayhouse_lower":                "节假日流动_居住社区房价_次低",
-        "f_holidayhouse_second_high":          "节假日流动_居住社区房价_次高",
-        "f_holidayhouse_high":                 "节假日流动_居住社区房价_高",
-        "f_holidayage_17":                     "节假日流动_年龄_0_17",
-        "f_holidayage_24":                     "节假日流动_年龄_18_24",
-        "f_holidayage_30":                     "节假日流动_年龄_25_30",
-        "f_holidayage_35":                     "节假日流动_年龄_31_35",
-        "f_holidayage_40":                     "节假日流动_年龄_36_40",
-        "f_holidayage_45":                     "节假日流动_年龄_41_45",
-        "f_holidayage_60":                     "节假日流动_年龄_46_60",
-        "f_holidayage_over_60":                "节假日流动_年龄_61以上",
-        "f_holidaysex_woman":                  "节假日流动_性别_女",
-        "f_holidaysex_man":                    "节假日流动_性别_男",
-        "f_workday_urban_cons_middle":         "工作日流动_城市消费水平_中",
-        "f_workday_urban_cons_low":            "工作日流动_城市消费水平_低",
-        "f_workday_urban_cons_lower":          "工作日流动_城市消费水平_次低",
-        "f_workday_urban_cons_secondhigh":     "工作日流动_城市消费水平_次高",
-        "f_workday_urban_cons_high":           "工作日流动_城市消费水平_高",
-        "f_workday_edu_junior_middle":         "工作日流动_学历_初中",
-        "f_workday_edu_doctor":                "工作日流动_学历_博士",
-        "f_workday_edu_specialty":             "工作日流动_学历_大专",
-        "f_workday_edu_primary":               "工作日流动_学历_小学",
-        "f_workday_edu_college":               "工作日流动_学历_本科",
-        "f_workday_edu_postgraduate":          "工作日流动_学历_硕士",
-        "f_workday_edu_senior_middle":         "工作日流动_学历_高中",
-        "f_workday_house_middle":              "工作日流动_居住社区房价_中",
-        "f_workday_house_low":                 "工作日流动_居住社区房价_低",
-        "f_workday_house_lower":               "工作日流动_居住社区房价_次低",
-        "f_workday_house_second_high":         "工作日流动_居住社区房价_次高",
-        "f_workday_house_high":                "工作日流动_居住社区房价_高",
-        "f_workday_age_17":                    "工作日流动_年龄_0_17",
-        "f_workday_age_24":                    "工作日流动_年龄_18_24",
-        "f_workday_age_30":                    "工作日流动_年龄_25_30",
-        "f_workday_age_35":                    "工作日流动_年龄_31_35",
-        "f_workday_age_40":                    "工作日流动_年龄_36_40",
-        "f_workday_age_45":                    "工作日流动_年龄_41_45",
-        "f_workday_age_60":                    "工作日流动_年龄_46_60",
-        "f_workday_age_over_60":               "工作日流动_年龄_61以上",
-        "f_workday_sex_woman":                 "工作日流动_性别_女",
-        "f_workday_sex_man":                   "工作日流动_性别_男",
-    }
-    
-class DeliveryConfig:
-    FEATURE_COLUMNS = [
-        "customer_code",            # 零售户代码
-        "goods_code",               # 卷烟代码
-        "retail_index_week",        # 周市场零售价格监测指数
-        "turnover_rate_collpoint",  # 采集点销售量动销率(周)
-        "turnover_rate_terminal",   # 零售终端销售量动销率(周)
-        "sale_qty",                 # 周销售量
-    ]
-    
-    CLEANING_RULES = {
-        "retail_index_week":                    {"method": "fillna", "opt": "fill", "value": 0.0000, "type": "num"},
-        "turnover_rate_collpoint":              {"method": "fillna", "opt": "fill", "value": 0.0000, "type": "num"},
-        "turnover_rate_terminal":               {"method": "fillna", "opt": "fill", "value": 0.0000, "type": "num"},
-        "sale_qty":                             {"method": "fillna", "opt": "fill", "value": 0, "type": "num"},
-    }
-    
-    FEATURES_MAP = {
-        "retail_index_week": "市场零售价格监测指数(周)",
-        "turnover_rate_collpoint": "采集点销售量动销率(周)",
-        "turnover_rate_terminal": "零售终端销售量动销率(周)",
-        "sale_qty": "周销售量"
+class CustConfig:
+    FEATURE_COLUMNS = [
+        "cust_code",                    # 零售户编码
+        "busi_place_area_section",      # 营业面积区间
+        "rent_section",                 # 租金区间
+        "rent_price_section",           # 租金单价区间
+        "busi_open_section",            # 营业开始时间区间
+        "busi_close_section",           # 营业结束时间区间
+        "is_chain_storename",           # 是否连锁
+        "criterion_codename",           # 守法经营情况
+        "market_info_codename",         # 市场采集点情况
+        "tag_codename",                 # 卷烟价格执行情况
+        "cooperate_codename",           # 配合程度
+        "store_appearance_name",        # 店面形象
+        "position_codename",            # 商圈名称
+        "sub_position_codename",        # 次级商圈名称
+        "zone_appraise_name",           # 地段评价
+        "choose_road_name",             # 路段评价
+        "choose_address_name",          # 选址
+        "area_position_type_name",      # 区域位置划分
+        "area_func_type_name",          # 区域功能划分
+        "community_func_type_name",     # 社区功能划分
+        "rate_pay_type_name",           # 纳税性质
+        "order_cycle_type_name",        # 订货周期
+        "is_modern_terminalname",       # 是否现代终端
+        "modern_terminal_name",         # 现代终端类型
+        "cooperate_type_name",          # 加盟类型
+        "terminal_star_name",           # 终端星级
+        "star_terminal_name",           # 星级终端类型
+        "appearance_span_section",      # 门面跨度区间
+        "upholster_name",               # 店内装潢名称
+        "shop_feature_name",            # 门店特色名称
+        "shop_char_type_name",          # 经营特色名称
+        "has_taste_name",               # 是否卷烟品吸区
+        "show_area_section",            # 卷烟成列面积区间
+        "sign_status_name",             # 是否有店招门头(店招门头状态)
+        "shopsunny_vi_name",            # 现代终端VI门头名称
+        "header_name",                  # 门头标识
+        "counter_status_name",          # 地柜状态
+        "counter_number",               # 地柜个数
+        "counter_put_type_name",        # 地柜陈列样式
+        "back_counter_status_name",     # 背柜状态
+        "back_counter_put_type_name",   # 背柜陈列样式
+        "back_counter_style_name",      # 背柜样式
+        "back_counter_number",          # 背柜个数
+        "back_counter_has_show_name",   # 背柜条烟陈列区状态
+        "legal_person_gender",          # 法人性别
+        "legal_education_name",         # 法人文化程度
+        "legal_is_cpc_member",          # 法人是否为党员
+        "operator_person_gender",       # 经营者性别
+        "operator_education_name",      # 经营者文化程度
+        "operator_is_cpc_member",       # 经营者是否为党员
+        "market_type_name",             # 市场类型名称
+        "busi_place_codename",          # 经营业态名称
+        "sub_busi_codename",            # 业态细分名称
+        "sub_market_type_name",         # 城乡分类名称
+        "creditclass_name",             # 信用等级名称
+    ]
+
+    ONEHOT_CAT = {
+        "busi_place_area_section":      ["0", "10(含)㎡以下", "10-20(含)㎡", "20-30(含)㎡", "30-40(含)㎡", "40-50(含)㎡", "50-60(含)㎡", 
+                                         "60-70(含)㎡", "70-80(含)㎡", "80-90(含)㎡", "90-100(含)㎡", "100㎡以上"],
+        "rent_section":                 ["0", "500(含)元以下", "500-1000(含)元", "1000-1500(含)元", "1500-2000(含)元", "2000-2500(含)元", 
+                                         "2500-3000(含)元", "3000-3500(含)元", "3500-4000(含)元", "4000-4500(含)元", "4500-5000(含)元", "5000元以上"],
+        "rent_price_section":           ["0", "500(含)元/㎡以下", "500-1000(含)元/㎡", "1000-1500(含)元/㎡", "1500-2000(含)元/㎡", "2000-2500(含)元/㎡", 
+                                         "2500-3000(含)元/㎡", "3000-3500(含)元/㎡", "3500-4000(含)元/㎡", "4000-4500(含)元/㎡", "4500-5000(含)元/㎡", "5000元/㎡以上"],
+        "busi_open_section":            ["未知区间", "0:00~1:00", "1:00~2:00", "2:00~3:00", "3:00~4:00", "4:00~5:00", "5:00~6:00", "6:00~7:00", "7:00~8:00", "8:00~9:00", 
+                                         "9:00~10:00", "10:00~11:00", "11:00~12:00", "12:00~13:00", "13:00~14:00", "14:00~15:00", "15:00~16:00", "16:00~17:00", "17:00~18:00", 
+                                         "18:00~19:00", "19:00~20:00", "20:00~21:00", "21:00~22:00", "22:00~23:00", "23:00~0:00"],
+        "busi_close_section":           ["未知区间", "0:00~1:00", "1:00~2:00", "2:00~3:00", "3:00~4:00", "4:00~5:00", "5:00~6:00", "6:00~7:00", "7:00~8:00", "8:00~9:00", 
+                                         "9:00~10:00", "10:00~11:00", "11:00~12:00", "12:00~13:00", "13:00~14:00", "14:00~15:00", "15:00~16:00", "16:00~17:00", "17:00~18:00", 
+                                         "18:00~19:00", "19:00~20:00", "20:00~21:00", "21:00~22:00", "22:00~23:00", "23:00~0:00"],
+        "is_chain_storename":           ["是", "否"],
+        "criterion_codename":           ["1年以内无违法违规情况", "1-3年无违法违规", "3年以上无违法违规情况", "违规"],
+        "market_info_codename":         ["未采集", "很好", "较好", "一般", "差"],
+        "tag_codename":                 ["很好", "较好", "一般", "差"],
+        "cooperate_codename":           ["好", "较好", "一般"],
+        "store_appearance_name":        ["好", "较好", "一般", "差"],
+        "position_codename":            ["交通枢纽区", "商业娱乐区", "办公区", "院校学区", "旅游景区", "集贸区", "居民区", "工业区", "农林渔牧区", "其他"],
+        "sub_position_codename":        ["交通枢纽区-高铁站", "交通枢纽区-车站", "交通枢纽区", "商业娱乐区", "办公区", "院校学区", "旅游景区", "集贸区", "居民区", "工业区", "农林渔牧区", "其他"],
+        "zone_appraise_name":           ["一类", "二类", "三类", "四类", "五类"],
+        "choose_road_name":             ["特别繁华", "繁华", "一般", "偏僻"],
+        "choose_address_name":          ["客流密集区", "要道", "社区", "其它"],
+        "area_position_type_name":      ["城区(市、区县、中心辖区)", "镇区1(有建制的乡镇政府所在地)", "镇区2(撤乡并镇取消的原乡政府所在地)", "镇区3(城乡结合部)", 
+                                         "农村1(经济发展较好的农村)", "农村2(经济发展较差的农村)", "农村3(经济发展一般的农村)", "农村4(新农村)"],
+        "area_func_type_name":          ["商贸中心(CBD)", "商贸功能区", "集贸地", "旅游景点", "学区(大专院校、培训机构)", "产业园区2(成熟)", "产业园区1(新兴、在建)", "大型厂、矿区"],
+        "community_func_type_name":     ["高档居住楼宇(成熟)", "高档居住楼宇(新兴、在建)", "一般居住楼宇(成熟)", "一般居住楼宇(新兴、在建)", 
+                                         "商住多用楼宇(成熟)", "商住多用楼宇(新兴、在建)", "政务办公楼宇"],
+        "rate_pay_type_name":           ["一般纳税人", "小规模纳税人", "小规模纳税人(个体)"],
+        "order_cycle_type_name":        ["一周一访", "两周一访", "四周一访", "六周一访", "一月两访", "一月一访", "暂失去联系", "暂不供货"],
+        "is_modern_terminalname":       ["是", "否"],
+        "modern_terminal_name":         ["直营终端", "合作终端", "加盟终端", "一般现代终端", "普通终端", "无法识别"],
+        "cooperate_type_name":          ["品牌加盟", "冠名加盟", "无"],
+        "terminal_star_name":           ["五星终端", "四星终端", "三星终端", "二星终端", "一星终端", "其他", "无"],
+        "star_terminal_name":           ["星级终端", "整改星级终端", "一般终端", "非星级终端", "未分类"],
+        "appearance_span_section":      ["8米以上", "7-8(含)米", "6-7(含)米", "5-6(含)米", "4-5(含)米", "3-4(含)米", "2-3(含)米", "2(含)米以下", "0"],
+        "upholster_name":               ["全面打造", "参标", "非标"],
+        "shop_feature_name":            ["临街橱窗,消费体验区", "临街橱窗", "消费体验区", "其它", "临街橱窗,其它", "消费体验区,临街橱窗", "其它,临街橱窗", 
+                                         "临街橱窗,消费体验区,其它", "其它,消费体验区", "消费体验区,其它,临街橱窗", "其它,临街橱窗,消费体验区", "消费体验区,其它", 
+                                         "其它,消费体验区,临街橱窗", "消费体验区,临街橱窗,其它", "临街橱窗,其它,消费体验区"],
+        "shop_char_type_name":          ['酒,茶,糖,其它', '糖,其它', '酒,茶,糖,特产', '酒,茶', '酒,糖,特产', '酒', '酒,茶,糖,特产,其它', '其它', '酒,茶,糖', 
+                                         '茶,酒', '酒,茶,特产,糖', '茶,酒,特产', '糖,特产', '茶,糖', '特产,糖', '糖,茶,酒', '酒,茶,其它', '酒,特产', '特产,其它',
+                                         ' 糖', '酒,茶,糖,服务,其它', '茶,酒,糖,其它', '服务', '服务,酒,其它', '酒,其它', '服务,茶,糖', '彩票', '餐饮', '餐饮,服务,其它,茶', 
+                                         '酒,糖,其它', '酒,服务,茶', '糖,特产,其它', '服务,其它', '茶,酒,其它', '糖,酒', '酒,糖', '茶,酒,糖,特产', '酒,茶,特产', '其它,糖', 
+                                         '酒,糖,茶,特产', '茶', '酒,糖,服务,其它', '特产', '糖,酒,茶,特产', '餐饮,其它', '酒,糖,特产,其它', '酒,茶,特产,其它', '其它,茶', 
+                                         '茶,糖,特产,酒', '酒,服务,其它', '其它,服务', '茶,糖,特产', '茶,特产,餐饮,服务,其它', '茶,其它', '酒,茶,糖,特产,服务', '其它,特产,糖,酒', 
+                                         '其它,酒', '酒,特产,其它', '其它,酒,服务', '糖,茶', '其它,特产,糖,茶,酒', '酒,茶,彩票', '特产,服务,其它', '酒,糖,茶', '餐饮,服务', 
+                                         '特产,酒', '酒,茶,服务', '酒,其它,特产', '其它,酒,茶,糖', '茶,特产,酒', '茶,酒,糖', '酒,特产,服务', '酒,服务', '彩票,糖', '酒,茶,糖,服务', 
+                                         '茶,糖,酒', '餐饮,酒', '酒,茶,糖,其它,服务', '茶,特产', '酒,茶,糖,其它,特产', '茶,糖,其它,酒', '酒,特产,服务,其它', '酒,茶,特产,糖,其它,服务',
+                                         '糖,其它,酒', '酒, 餐饮,服务', '酒,茶,糖,特产,服务,其它', '特产,酒,茶', '酒,茶,其它,糖', '茶,糖,其它', '茶,特产,其它', 
+                                         '酒,茶,糖,餐饮,服务,其它', '糖,特产,茶,酒', '酒,茶,特产,服务', '酒,茶,糖,特产,餐饮', '服务,特产,酒', '酒,茶,其它,特产', 
+                                         '酒,茶,糖,特产,餐饮,服务,其它', '茶,彩票', '茶,糖,酒,特产', '特产,茶,酒', '特产,茶', '糖,特产,酒,茶', '特产,糖,茶,酒', '服务,茶,酒', 
+                                         '其它, 酒,茶', '酒,茶,糖,特产,服务,餐饮,其它', '酒,糖,茶,特产,其它', '茶,酒,特产,其它', '酒,茶,服务,其它', '服务,餐饮,酒', '茶,其它,特产', 
+                                         '糖,特产,茶', '茶,酒,特产,糖', '酒,茶,糖,餐饮,服务', '酒,茶,糖,彩票', '服务,酒', '糖,酒,其它', '酒,彩票,茶', '其它,特产', '糖,服务', 
+                                         '茶,酒,糖,特产,其它', '酒,其它,茶', '酒,糖,餐饮', '酒,茶,糖,特产,彩票,餐饮,服务,其它', '特产,糖,茶', '其它,特产,酒,茶', '其它,酒,茶,特产', 
+                                         '酒,糖,特产,服务', '茶,糖,服务', '糖,其它,酒,茶', '茶,酒,特产,服务', '酒,茶,特产,服务,其它', '糖,特产,酒', '酒,糖,特产,茶', '特产,餐饮,服务',
+                                         '餐饮,服务,其它', '其它,茶,酒', '其它,酒,糖', '其它,糖,酒', '酒,茶,特产,餐饮,服务', '茶,糖,特产,其它', '其它,酒,茶,糖,特产', 
+                                         '酒,茶,特产,糖,其它', '服务,酒,茶,糖', '酒,其它, 糖', '特产,茶,酒,糖', '服务,酒,糖', '糖,酒,茶,其它', '酒,特产,糖', '糖,茶,酒,其它', 
+                                         '糖,其它,特产', '糖,茶,其它', '其它,糖,茶,酒', '服务,酒,茶,糖,特产,其它', '茶,特产,酒,其它', '酒,茶,服务,特产', '酒,糖,其它,特产', 
+                                         '特产,酒,其它', '茶,糖,特产,服务', '餐饮,特产', '糖,酒,特产', '糖,酒,餐饮', '酒,特产,茶', '其它,茶,糖,酒', '酒,茶,糖,特产,彩票', '服务,特产',
+                                         '特产,服务', '糖,酒,茶', '酒,糖,特产,服务,其它', '糖,茶,酒,特产', '特产,茶,其它', '酒,特产,糖,茶', '茶,其它,糖', '餐饮,酒, 茶',
+                                         '茶,特产,糖,酒', '彩票,其它', '酒,特产,餐饮,服务,其它', '酒,茶,糖,特产,餐饮,服务', '特产,彩票', '特产,糖,酒,茶', ' 茶,糖,酒,其它',
+                                         '酒,茶,糖,餐饮', '酒,糖,餐饮,服务,特产', '茶,糖,餐饮,其它', '酒,茶,特产,其它,服务', '彩票,糖,酒', '酒,其它,茶,糖', '其它,糖,茶', '特产,酒,糖',
+                                         '特产,糖,餐饮,服务', '酒,餐饮,服务,其它', '特产,糖,茶,其它', '糖,茶,特产', '酒,茶,糖,特产,彩票,餐饮,服务', '酒,茶,糖,特产,彩票,其它',
+                                         '其它,糖,酒,茶', '其它,糖,茶,酒,特产', '酒,糖,服务', '酒,餐饮', '糖,茶,酒,特产,其它', '其它,餐饮', '茶,糖,特产,其它,酒',
+                                         '酒,茶,特产,餐饮,其它', '服务,糖,酒', '服务,餐饮', '特产,糖,其它', '特产,酒,茶,糖,其它', '特产,酒,糖,其它', '酒,茶,餐饮,其它',
+                                         '其它,服务,餐饮', '茶,酒,其它,服务', '茶,其它,特产,酒', '酒,特产,茶,糖,服务,其它', '酒,茶,糖,特产,其它,餐饮', '酒,其它,服务',
+                                         '酒,特产,茶,糖', '特产,酒,茶,糖,服务,其它', '酒,糖,茶,其它', '糖,其它,茶', '服务,茶,酒,其它', '酒,茶,特产,餐饮,糖', '茶,酒,餐饮,服务,其它',
+                                         '酒,特产,茶,其它', '餐饮,糖,其它', '酒,茶,餐饮,服务', '彩票,特产', '茶,酒,糖,服务', '茶,酒,服务', '酒,茶,糖,特产,其它,服务', '服务,酒,其它,茶',
+                                         '茶,特产,服务,其它', '茶,服务,特产', '糖,特产,酒,其它', '酒,餐饮,其它', '酒,糖,餐饮,其它', '酒,特产,彩票,服务', '服务,糖,茶', '服务,糖,其它', 
+                                         '茶,特产,糖', '特产,糖,酒', '酒,糖,其它,服务', '茶,糖,彩票', '特产,酒,茶,糖', '特产,茶,酒,其它', '茶,特产, 其它,酒,糖', '其它,特产,糖,酒,茶', 
+                                         '茶,糖,酒,彩票', '其它,茶,服务', '服务,特产,糖,茶,酒', '餐饮,酒,茶,糖', '特产,酒,服务,其它', '酒,茶,餐饮', '特产,糖,餐饮', '特产,服务,糖', 
+                                         '彩票,酒,茶', '其它,特产,糖', '酒,茶,其它,服务,特产', '茶,糖,特产,酒,其它', '服务,酒,糖,特产,其它', '酒,茶,其它,服务', '酒,茶,服务,餐饮,其它',
+                                         '茶,糖,彩票,餐饮,服务,其它', '餐饮,酒,其它', '其它,茶,糖', '特产,其它,酒,茶,糖', '茶,服务', '酒,茶,糖,特产,彩票,餐饮,其它', '特产,服务,茶,酒',
+                                         '服务,其它,酒', '餐 饮,糖,酒', '服务,酒,糖,其它,特产', '其它,茶,特产', '茶,特产,服务', '茶,特产,餐饮,服务', '酒,茶,其它,餐饮', '茶,餐饮', 
+                                         ' 茶,酒,特产,糖,其它', '茶,酒,糖,特产,彩票', '彩票,酒,茶,糖', '服务,糖,特产,其它', '服务,酒,茶', '其它,茶,糖,特产', '茶,酒,彩票', 
+                                         '特产,茶,糖,其它', '酒,茶,糖,特产,彩票,服务,其它,餐饮', '特产,茶,糖', '酒,糖,茶,服务', '茶,其它,酒', '茶,酒,特产,彩票', '酒,茶,特产,彩票', 
+                                         '茶,服务,其它', '茶,酒,糖,服务,特产', '糖,酒,服务,其它', '其它,茶,酒,糖', '酒,茶,彩票,糖,服务,其它', '茶,糖,酒,其它,服务', '服务,茶,酒,特产', 
+                                         '糖,其它,服务', '糖,茶,餐饮', '茶,糖,特产,餐饮,服务', '其它,服务,酒,茶', '茶,酒,糖,服务,其它', '特产,糖,茶,酒,其它', '糖,茶,特产,其它', 
+                                         '其它,茶,酒,糖,特产', '酒,餐饮,茶', '服务,酒,茶,特产,糖,其它', '糖,酒,茶,服务', '糖,酒,特产,其它', '酒,特产,餐饮,服务', '糖,其它,酒,特产', 
+                                         '酒,茶,特产,餐饮', '酒,茶,糖,彩票,服务', '彩票,餐饮,服务', '服务,酒,特产', '酒,服务,餐饮', '茶,糖,酒,特产,餐饮', '酒,其它,糖,茶', 
+                                         '餐饮,特产,服务,其它', '糖,特产,服务', '酒,茶,特产,糖,服务', '特产,酒,服务', '糖,其它,茶,酒,特产', '特产,酒,茶,服务', '餐饮,其它,服务', 
+                                         '酒,茶,糖,彩票,服务,其它', '其它,特产,酒', '特产,餐饮,服务,茶,糖', '服务,酒,茶,特产,其它', '糖,餐饮,酒,其它', '茶,餐饮,服务', 
+                                         '其 它,酒,茶,糖,特产,服务', '服务,酒,茶,糖,特产', '其它,糖,酒,服务', '其它,特产,糖,茶', '服务,其它,糖,茶', '茶,糖,酒,特产,其它', '彩票,茶', 
+                                         '茶,酒,其它,糖', '茶,餐饮,酒', '其它,糖,酒,特产', '酒,茶,糖,服务,特产', '茶,特产,其它,服务', '糖,茶,酒, 服务', '酒,茶,其它,服务,餐饮,特产,糖',
+                                         '特产,其它,茶', '其它,特产,茶,酒', '酒,糖,特产,餐饮,服务,其它', '特产,餐饮', '特 产,其它,糖', '其它,糖,特产,茶,酒', '服务,糖,特产,茶,酒', 
+                                         '特产,其它,酒', '特产,糖,茶,酒,服务', '酒,特产,餐饮,其它', '特 产,其它,服务,糖,酒,茶', '酒,特产,茶,服务', '茶,糖,酒,服务', '其它,彩票', 
+                                         '餐饮,服务,糖', '酒,彩票,其它', '糖,特产,其它, 茶', '糖,茶,酒,特产,餐饮', '彩票,茶,酒', '其它,服务,酒,茶,糖,特产', '酒,特产,餐饮,茶', 
+                                         '酒,茶,彩票,其它', '茶,特产,酒,糖', '服务,餐饮,其它', '服务,特产,糖', '酒,糖,特产,其它,服务', '餐饮,茶,酒', '酒,茶,糖,特产,服务,彩票,其它', 
+                                         '茶,酒,餐饮', '糖,茶,酒,其它,特产', '茶,酒,彩票,其它', '服务,其它,酒,糖', '糖,服务,其它', '酒,特产,糖,茶,其它', '特产,其它,酒,茶,糖, 服务', 
+                                         '糖,茶,特产,餐饮,服务', '酒,茶,餐饮,服务,其它', '其它,特产,服务', '特产,酒,茶,糖,服务,餐饮', '酒,糖,茶,餐饮,服务,其它', '服务,酒,茶,糖,其它', 
+                                         '酒,特产,其它,糖,茶', '其它,餐饮,服务', '其它,酒,茶,糖,特产,彩票', '茶,酒,服务,餐饮', '糖, 特产,服务,其它', '茶,糖,餐饮', '酒,糖,其它,茶', 
+                                         '其它,茶,糖,特产,酒', '茶,酒,其它,特产', '糖,特产,茶,酒,其它', '酒,茶,特产,其它,糖', '酒,茶,服务,餐饮', '茶,酒,服务,其它', '服务,其它,茶,酒', 
+                                         '酒,特产,彩票', '特产,其它,酒,糖', '服务,糖,酒,茶', '其它,酒,茶,服务', '服务,茶', '酒,特产,糖,其它', '特产,其它,酒,茶', '糖,特产,茶,其它', 
+                                         '酒,茶,特产,糖,餐饮,服务,其它', '服务,茶,糖,酒,特产,其它', '服务,糖,特产', '特产,餐饮,其它', '糖,茶,酒,餐饮', '特产,茶,服务,其它', 
+                                         '酒,特产,餐饮', '糖,特产,其它,酒', '服务,酒,茶,其它', '糖,其它,茶,酒', '茶,糖,特产,服务,其它', '餐饮,酒,服务,其它', '酒,茶,彩票,餐饮,服务', 
+                                         '糖,服务,酒', '酒,茶,其它,特产,糖', '酒,糖,特产,茶,其它', '其它,特产,茶,酒,糖', '酒,糖,其它,餐饮', '餐饮,服务,酒,茶,其它', 
+                                         '特产,茶,糖,酒,其它', '茶,特产,酒,糖,服务', '特产,服务,茶', '其它,糖,特产', '茶,特产,糖,其它', '其它,酒,餐饮', '酒,服务,糖,其它', 
+                                         '餐饮,糖,特产', '特产,酒,茶,餐饮', '其它,糖,特产,茶', '酒,茶,服务,特产,其它', '酒,特产,服务,糖', '茶,酒,餐 饮,其它', '酒,餐饮,糖,其它', 
+                                         '其它,服务,特产,糖,酒', '酒,茶,糖,特产,彩票,餐饮', '服务,其它,特产,糖,茶', '酒,茶,糖,其它, 服务,餐饮', '糖,特产,其它,服务', '糖,茶,特产,酒', 
+                                         '糖,餐饮', '服务,彩票', '茶,酒,餐饮,服务', '餐饮,茶', '茶,糖,酒,餐饮', '酒,茶,糖,特产,餐饮,其它', '茶,酒,特产,餐饮', '茶,餐饮,其它', 
+                                         '酒,服务,其它,茶', '其它,酒,特产', '特产,糖,服务,其它', '糖,酒,服务', '糖,服务,餐饮', '茶,特产,其它,酒', '特产,酒,糖,茶', '服务,特产,其它', 
+                                         '糖,茶,酒,特产,服务', '特产,其它,茶, 糖,酒', '茶,酒,糖,特产,服务,其它', '酒,茶,特产,服务,糖', '酒,服务,茶,特产', '餐饮,糖,茶,酒', 
+                                         '酒,糖,彩票,其它', '糖,茶, 酒,特产,其它,服务', '特产,茶,酒,糖,其它', '餐饮,特产,酒,茶', '服务,餐饮,酒,茶', '酒,茶,其它,糖,特产', 
+                                         '其它,糖,茶,服务', '茶,酒,糖,特产,服务', '糖,酒,彩票', '服务,特产,茶,酒', '特产,糖,服务', '酒,其它,茶,特产', '服务,茶,酒,糖,特产,其它', 
+                                         ' 酒,特产,糖,茶,餐饮,服务', '糖,酒,其它,服务', '其它,服务,酒,茶,糖', '茶,酒,彩票,特产', '酒,茶,糖,特产,彩票,服务', '服务, 酒,茶,特产', 
+                                         '服务,茶,糖,特产', '酒,茶,服务,其它,糖,特产', '酒,其它,糖,特产', '其它,糖,酒,茶,特产', '服务,其它,特产', ' 酒,茶,糖,彩票,餐饮', 
+                                         '茶,糖,彩票,餐饮', '酒,茶,糖,特产,服务,餐饮', '糖,茶,酒,服务,其它', '餐饮,其它,特产,酒', '酒,糖,特 产,餐饮,彩票', '服务,酒,糖,其它', 
+                                         '酒,茶,特产,服务,其它,糖', '特产,服务,酒,茶,糖', '服务,其它,餐饮', '酒,糖,茶,特产,服务,其它', '茶,特产,服务,餐饮', '茶,餐饮,服务,酒', 
+                                         '彩票,特产,糖,茶,酒,其它,服务', '糖,茶,其它,特产', '糖,餐饮,酒,茶', '特 产,酒,茶,其它', '糖,特产,服务,酒', '餐饮,茶,酒,其它', 
+                                         '其它,服务,酒,糖,特产', '其它,服务,酒', '酒,其它,餐饮,服务', '其它,糖,茶,特产', '茶,糖,特产,彩票', '酒,茶,彩票,特产', '糖,特产,餐饮', 
+                                         '酒,茶,特产,糖,服务,其它', '特产,糖,餐饮,其它', '餐 饮,其它,茶', '服务,糖', '酒,茶,糖,特产,餐饮,其它,服务', '茶,酒,特产,服务,其它', 
+                                         '茶,特产,餐饮', '酒,茶,糖,彩票,其它', ' 糖,彩票', '其它,糖,特产,酒,茶', '服务,特产,糖,酒', '酒,服务,其它,特产', '茶,糖,其它,服务', 
+                                         '餐饮,糖,酒,其它', '酒,茶,特 产,彩票,餐饮,服务', '糖,茶,酒,餐饮,服务,其它', '茶,酒,特产,其它,服务', '其它,服务,餐饮,特产', '酒,其它,特产,服务',
+                                         '酒, 彩票', '餐饮,酒,糖,其它', '茶,服务,其它,酒', '酒,茶,餐饮,特产', '其它,糖,茶,酒,服务', '彩票,服务,特产,酒', '茶,糖,特产, 服务,餐饮', 
+                                         '服务,糖,茶,酒,特产', '其它,服务,特产,糖,茶,酒', '茶,特产,其它,糖', '茶,其它,糖,特产', '茶,酒,糖,餐饮,服务, 其它', '服务,特产,糖,其它', 
+                                         '糖,特产,彩票,茶', '酒,茶,服务,其它,餐饮', '餐饮,茶,特产', '酒,茶,特产,餐饮,服务,其它', '餐 饮,彩票', '餐饮,特产,其它', '特产,彩票,糖,茶,酒', 
+                                         '茶,糖,餐饮,服务', '糖,酒,其它,特产', '茶,服务,酒,糖', '其它,彩票,酒', '酒,糖,茶,其它,服务', '服务,特产,酒,茶,糖', '餐饮,特产,糖,其它,酒', 
+                                         '特产,其它,糖,酒,茶', '糖,茶,酒,彩票', '酒,糖,茶,特产,服务', '服务,茶,特产', '糖,餐饮,其它', '酒,糖,餐饮,服务,其它', '酒,茶,餐饮,服务,特产', 
+                                         '酒,糖,茶,餐饮,其它', '其它,特产,茶,糖', '其它,特产,茶,糖,酒', '茶,餐饮,特产,糖', '酒,糖,彩票', '糖,特产,彩票', '服务,特产,糖,茶,酒,其它', 
+                                         '其它,服务,特产,糖', '糖,茶,酒,餐饮,服务', '特产,茶,糖,服务', '糖,茶,餐饮,其它', '其它,糖,服务', '其它,服务,糖,特产', '茶,糖,特产, 餐饮,酒', 
+                                         '特产,服务,糖,茶,酒', '糖,特产,其它,酒,茶', '茶,餐饮,服务,其它', '服务,餐饮,特产,糖,茶,酒', '茶,糖,特产,服务, 酒', '酒,糖,特产,其它,茶', 
+                                         '茶,酒,糖,其它,特产', '服务,其它,糖', '酒,茶,糖,服务,餐饮', '酒,糖,餐饮,服务', '酒,特产,茶,糖,其它', '茶,其它,服务', '酒,茶,特产,彩票,餐饮', 
+                                         '服务,糖,茶,酒', '酒,服务,餐饮,其它', '服务,酒,其它,特产', '彩票,糖,茶, 酒', '其它,茶,酒,糖,服务', '餐饮,糖', '其它,特产,茶', '酒,服务,特产', 
+                                         '酒,服务,茶,糖,特产,其它', '糖,茶,服务', '酒,糖,茶,服务,其它', '餐饮,特产,酒', '特产,糖,服务,餐饮', '特产,酒,其它,茶,糖', '特产,茶,服务', 
+                                         '糖,茶,特产,服务', '茶,特产,彩票', '其它,服务,糖,特产,茶,酒', '彩票,茶,糖', '糖,酒,茶,特产,其它', '其它,酒,糖,特产', '服务,其它,酒,茶,糖,特产',
+                                         '酒,糖, 服务,特产,其它', '特产,茶,餐饮,服务,其它', '茶,餐饮,特产', '酒,茶,餐饮,其它,服务', '酒,服务,其它,彩票', '特产,酒,茶,糖, 服务', 
+                                         '特产,茶,彩票,其它', '酒,茶,特产,彩票,服务', '服务,其它,酒,茶', '糖,茶,其它,酒', '酒,茶,服务,其它,特产', '酒,特产,茶,糖,服务', 
+                                         '彩票,其它,茶,酒', '特产,其它,服务', '酒,特产,其它,服务', '糖,茶,酒,其它,服务', '彩票,服务,酒,其它', '服务,糖,茶,酒,特产,其它', 
+                                         '其它,服务,特产', '酒,茶,特产,彩票,其它', '服务,其它,茶,酒,糖', '彩票,酒', '彩票,服务', '茶,特产, 餐饮,其它', '餐饮,茶,糖,酒', '服务,茶,其它',
+                                         '服务,酒,茶,糖,其它,特产', '特产,其它,糖,茶', '服务,茶,糖,酒', '酒,茶,餐饮,服务,其它,特产', '酒,其它,糖,茶,特产', '茶,服务,糖,特产', 
+                                         '茶,酒,糖,彩票,特产,其它', '彩票,服务,其它', '特产,茶,糖,酒', '糖,其它,餐饮', '糖,餐饮,服务', '酒,茶,糖,服务,其它,特产', 
+                                         '茶,糖,餐饮,服务,其它', '酒,糖,其它,茶,特产', '糖,茶,特产,服 务,彩票', '特产,糖,其它,酒,茶', '茶,糖,特产,餐饮,其它,服务', 
+                                         '其它,特产,酒,茶,糖', '糖,特产,酒,服务,其它', '服务,茶,酒, 糖,特产', '餐饮,茶,糖', '特产,糖,酒,茶,其它', '酒,糖,特产,餐饮', 
+                                         '酒,茶,糖,餐饮,特产', '酒,餐饮,茶,糖', '服务,餐饮,糖', '糖,特产,服务,餐饮,其它', '其它,彩票,特产,服务', '糖,茶,特产,其它,酒', 
+                                         '其它,酒,特产,糖,茶', '酒,茶,糖,彩票,特产', '糖, 茶,酒,特产,彩票,其它,服务', '茶,其它,服务,酒', '服务,餐饮,酒,茶,其它', '其它,特产,酒,糖', 
+                                         '茶,酒,糖,特产,服务,餐饮,其它', '餐饮,服务,特产', '酒,糖,茶,特产,彩票', '酒,服务,茶,其它', '酒,其它,糖,服务', '酒,其它,特产,茶', 
+                                         '特产,糖,茶,餐饮', ' 酒,其它,茶,糖,特产', '酒,茶,糖,特产,彩票,服务,其它', '酒,糖,特产,餐饮,服务', '糖,特产,酒,服务', '酒,糖,特产,彩票,其它', 
+                                         '其它,特产,服务,茶', '酒,茶,糖,特产,服务,其它,餐饮', '餐饮,服务,酒', '酒,茶,特产,其它,餐饮', '茶,糖,彩票,其它', '彩票,酒,糖', 
+                                         '糖,彩票,服务,其它,酒', '服务,其它,酒,茶,糖', '茶,彩票,特产', '特产,服务,餐饮', '酒,茶,糖,餐饮,其它', '特产,服务, 酒,糖', '酒,特产,其它,茶', 
+                                         '餐饮,酒,茶,其它', '特产,糖,服务,酒,茶', '酒,餐饮,特产', '特产,酒,糖,服务', '特产,服务,其它, 茶,酒,糖', '特产,茶,酒,餐饮,服务', 
+                                         '其它,酒,茶,糖,服务', '茶,酒,糖,特产,餐饮,服务', '茶,糖,酒,特产,服务', '服务,茶,糖,其它', '餐饮,其它,酒', '酒,糖,服务,特产', 
+                                         '特产,服务,其它,酒', '餐饮,酒,茶,服务', '其它,餐饮,酒', '酒,糖,茶,特产,其它,服务', '特产,服务,茶,酒,糖', '其它,茶,特产,糖,酒', 
+                                         '其它,服务,特产,糖,茶', '酒,糖,服务,餐饮', '茶,糖,服务,餐饮', '特产,服务,酒', '茶,服务,酒', '餐饮,服务,其它,糖,茶', 
+                                         '酒,茶,糖,特产,餐饮,服务,其它,彩票', '茶,酒,糖,餐饮,其它', '酒,糖,特产,彩票, 餐饮,服务,其它', '糖,彩票,酒', '服务,特产,糖,茶', 
+                                         '服务,餐饮,特产', '酒,茶,糖,其它,餐饮', '其它,茶,特产,彩票', '酒,糖,茶,特产,餐饮', '酒,茶,糖,特产,服务,彩票', '其它,酒,特产,服务', 
+                                         '彩票,酒,特产', '特产,酒,茶,其它,糖', '茶,酒,糖,餐饮', '茶,彩票,特产,糖', '服务,其它,茶,糖,特产,酒', '酒,茶,糖,服务,其它,彩票', '彩票,酒,其它',
+                                         '其它,餐饮,服务,糖', '服务,其它,特 产,糖,茶,酒', '特产,彩票,餐饮,服务,其它,茶,糖', '茶,糖,餐饮,酒', '酒,服务,特产,茶', '彩票,餐饮', 
+                                         '其它,酒,糖,服务', '餐 饮,服务,酒,茶', '其它,茶,酒,特产', '特产,其它,酒,糖,茶', '特产,糖,茶,酒,服务,其它', '酒,特产,茶,其它,服务', 
+                                         '酒,茶,服务,其它,糖', '餐饮,酒,特产', '茶,糖,其它,特产,酒', '酒,特产,彩票,餐饮', '彩票,糖,茶', '酒,服务,餐饮,糖,其它', '彩票,餐饮,酒,茶', 
+                                         '糖,茶,彩票', '特产,餐饮,服务,其它,茶,酒', '其它,服务,特产,茶,酒', '酒,餐饮,服务,其它,糖,茶', '茶,餐饮,其它,服务', '特产,糖,其它,酒', 
+                                         '服务,糖,酒,其它', '糖,特产,其它,茶,酒', '餐饮,特产,茶', '茶,糖,其它,特产', '餐饮,服务,其它,酒', '其它,茶,酒,服务', '糖,特产,酒,餐饮', 
+                                         '糖,特产,茶,酒,服务', '茶,彩票,餐饮,服务,其它', '服务,其它,糖,特产', '茶,酒,糖,特产, 餐饮', '酒,茶,餐饮,服务,糖', '茶,其它,糖,酒', 
+                                         '酒,茶,彩票,服务', '餐饮,酒,茶,糖,其它', '糖,酒,特产,茶', '餐饮,其它,茶,酒,糖', '特产,糖,酒,餐饮,彩票,服务', '糖,酒,茶,服务,其它', 
+                                         '服务,糖,特产,其它,酒', '糖,特产,茶,餐饮', '茶,酒,糖,彩票', '餐饮,酒,茶,特产', '餐饮,服务,酒,特产', '服务,其它,特产,糖', '茶,服务,特产,其它', 
+                                         '其它,酒,特产,茶,糖', '其它,服务,餐饮,酒', '酒,茶,服务,特产,糖', '酒,糖,茶,其它,特产', '酒,餐饮,茶,特产', '服务,其它,糖,酒,茶', 
+                                         '茶,其它,酒,特产', '酒,糖,特产,彩票', '糖,其它,酒,茶,服务', '其它,糖,茶,酒,餐饮', '特产,其它,服务,酒', '餐饮,特产,糖', '其它,糖,服务,酒', 
+                                         '酒,服务,糖', '酒,茶,特产,服务,糖,其它', '服务,茶,酒,糖', '茶,糖,特产,餐饮', '其它,餐饮,服务,特产,茶,酒', '酒,特产,服务,餐饮', '其它,酒,糖,茶',
+                                         '酒,茶,其它,服务,糖', '酒,彩票,茶,服务,其它', '餐饮,服务,特产,其它', '糖,酒,特产,服务', '其它,酒,茶,糖,特产,餐 饮', '茶,酒,特产,糖,服务', 
+                                         '酒,茶,其它,餐饮,服务', '其它,茶,糖,酒,特产', '特产,餐饮,酒,茶,服务,其它', '特产,彩票,餐饮,服务,其它', '特产,糖,酒,服务', 
+                                         '服务,茶,酒,特产,其它', '酒,服务,特产,其它', '其它,服务,酒,茶,特产', '茶,其它,酒,糖', '糖, 服务,特产', '服务,其它,茶', '糖,服务,其它,茶,酒', 
+                                         '其它,特产,服务,糖,茶', '糖,服务,茶', '糖,特产,彩票,餐饮', '酒,茶,服务,糖', '服务,茶,酒,特产,糖,其它', '茶,糖,酒,其它,特产', '彩票,服务,酒', 
+                                         '茶,糖,特产,彩票,餐饮,服务,其它', '其它,特产,糖, 服务', '茶,酒,糖,特产,其它,服务', '特产,茶,餐饮,服务', '酒,糖,特产,服务,餐饮', '特产,糖,彩票',
+                                         '餐饮,其它,酒,茶', '酒,特产,服务,茶,其它', '酒,茶,糖,餐饮,其它,服务', '酒,其它,彩票', '茶,餐饮,酒,糖', '酒,茶,糖,服务,餐饮,其它', 
+                                         '彩票,酒,服务', '茶,特产,糖,服务', '其它,特产,糖,服务,酒', '餐饮,特产,茶,酒', '茶,酒,特产,糖,餐饮', '其它,彩票,特产', '彩票,特产,茶', 
+                                         '茶,糖,服务,其它', '酒,茶,特产,服务,餐饮', '服务,餐饮,特产,糖,茶', '其它,服务,酒,糖', '其它,糖,茶,特产,酒', '酒,茶,糖,特 产,其它,彩票', 
+                                         '糖,彩票,其它', '服务,酒,糖,特产', '酒,茶,其它,彩票', '其它,服务,餐饮,特产,茶,酒', '酒,茶,餐饮,糖', '糖, 特产,餐饮,服务', 
+                                         '糖,茶,酒,特产,服务,其它', '其它,服务,特产,酒,茶', '酒,茶,餐饮,特产,服务', '酒,特产,其它,糖', '服务,酒,特产,其它', '特产,服务,餐饮,糖,茶,酒', 
+                                         '酒,特产,服务,其它,糖', '服务,特产,酒,茶', '茶,糖,特产,酒,服务', '服务,餐饮,酒,茶,糖,其它', '茶,酒,糖,餐饮,服务', '糖,特产,酒,茶,餐饮', 
+                                         '彩票,酒,糖,特产,其它', '酒,茶,服务,糖,特产', '茶,酒,服务,特产', '糖,彩票,茶', '特产,酒,其它,服务', '酒,其它,餐饮', '茶,酒,特产,其它,糖', 
+                                         '服务,酒,糖,茶', '特产,糖,茶,酒,彩票,餐饮,其它', '特产,茶,其它,糖', '酒,彩票,服务,其它', '特产,茶,酒,糖,彩票', '餐饮,服务,酒,茶,特产', 
+                                         '其它,糖,特产,酒', '餐饮,特产,酒,其它,茶', '特产,糖,茶,酒,餐饮,其它', '其它,服务,茶,酒', '茶,糖,特产,餐饮,服务,其它', '特产,餐饮,酒', 
+                                         '特产,彩票,餐饮,服务,其它,糖', '特产,服务,其它,酒,茶', '糖,茶,特产,酒,其它', '酒,糖,茶,特产,餐饮,服务,其它', '其它,糖,茶,特产,服务', 
+                                         '特产,酒,餐饮', '茶,服务,糖,酒', '特产,彩票,服务', '酒,服务,彩票', '糖,彩票,特产,茶,酒', '特产,其它,糖,酒', '酒,茶,彩票,服务,其它', 
+                                         '酒,茶,特产,其它,服务,餐饮', '茶,糖,服务,特产', '糖,茶,酒,服务,餐饮', '酒,特产,其它,茶,糖', '酒,特产,糖,茶,其它, 餐饮', '餐饮,特产,糖,茶,酒', 
+                                         '酒,茶,特产,彩票,糖', '酒,其它,服务,餐饮', '服务,餐饮,茶,酒', '酒,糖,茶,特产,餐饮,其它', ' 酒,糖,茶,服务,餐饮,其它', '酒,服务,茶,糖', 
+                                         '酒,餐饮,其它,服务', '服务,其它,糖,茶,酒', '酒,其它,特产,糖', '茶,特产,餐饮, 酒', '彩票,茶,酒,其它', '特产,酒,茶,服务,其它', 
+                                         '糖,服务,餐饮,其它', '糖,特产,酒,茶,其它', '酒,餐饮,糖,茶', '服务,其它, 特产,酒,茶,糖', '酒,茶,糖,餐饮,服务,其它,特产', '服务,特产,茶', 
+                                         '特产,糖,茶,酒,彩票,餐饮,服务', '酒,彩票,餐饮', '糖,茶, 酒,餐饮,其它', '酒,糖,特产,餐饮,其它', '酒,餐饮,糖,特产', '餐饮,茶,糖,特产', 
+                                         '彩票,酒,茶,糖,特产', '餐饮,茶,酒,糖,特产', '茶,糖,特产,其它,服务', '酒,糖,茶,餐饮', '其它,特产,酒,糖,茶', '茶,糖,其它,餐饮', 
+                                         '彩票,酒,茶,其它', '彩票,其它,特产', '茶,特产,酒,糖,其它'],
+        "has_taste_name":               ["是", "否"],
+        "show_area_section":            ["8㎡以上", "7.5-8(含)㎡", "7-7.5(含)㎡", "6.5-7(含)㎡", "6-6.5(含)㎡", "5.5-6(含)㎡", "5-5.5(含)㎡", 
+                                         "4.5-5(含)㎡", "4-4.5(含)㎡", "3.5-4(含)㎡", "3-3.5(含)㎡", "2.5-3(含)㎡", "2-2.5(含)㎡", "1.5-2(含)㎡",
+                                         "1-1.5(含)㎡", "0.5-1(含)㎡", "0.5(含)㎡以下", "0"],
+        "sign_status_name":             ["有", "计划中", "无"],
+        "shopsunny_vi_name":            ["直营终端", "合作终端", "加盟终端", "一般现代终端", "普通终端", "无"],
+        "header_name":                  ["连锁形象标识", "单店形象标识", "无标识"],
+        "counter_status_name":          ["有", "计划中", "无"],
+        "counter_number":               ["15", "9", "8", "7", "6", "5", "4", "3", "2", "1", "0"],
+        "counter_put_type_name":        ["独立陈列", "混杂陈列", "无陈列"],
+        "back_counter_status_name":     ["有", "计划中", "无"],
+        "back_counter_put_type_name":   ["独立陈列", "混杂陈列", "无陈列"],
+        "back_counter_style_name":      ["条烟展示板面", "条包混合展示板面", "无条烟展示板面"],
+        "back_counter_number":          ["25", "20", "18", "16", "15", "14", "13", "12", "11", "10", "9", "8", "7", "6", "5", "4", "3", "2", "1", "0"],
+        "back_counter_has_show_name":   ["有", "无"],
+        "legal_person_gender":          ["男", "女"],
+        "legal_education_name":         ["大学以上", "大学", "大专", "中专", "高中", "初中", "小学"],
+        "legal_is_cpc_member":          ["是", "否"],
+        "operator_person_gender":       ["男", "女"],
+        "operator_education_name":      ["大学以上", "大学", "大专", "中专", "高中", "初中", "小学"],
+        "operator_is_cpc_member":       ["是", "否"],
+        "market_type_name":             ["城网", "农网"],
+        "busi_place_codename":          ["烟草专业店", "商场", "超市", "便利店", "娱乐服务类", "其他"],
+        "sub_busi_codename":            ["烟草专卖店", "烟草专柜", "烟酒商店", "其他烟草专业店", "现代连锁便利店", 
+                                         "现代单体便利店", "超市", "传统便利店", "商场", "宾馆(酒店)", "餐馆", "休闲娱乐店", "其他", "未细分"],
+        "sub_market_type_name":         ["主城区", "镇中心区", "城乡结合区", "镇乡结合区", "乡中心区", "村庄", "特殊区域", "未分类"],
+        "creditclass_name":             ["AAA", "AA", "A", "C", "D"]
+    }
+
+    CLEANING_RULES = {
+        "busi_place_area_section":      {"method": "fillna", "opt": "fill", "value": "0", "type": "str"},
+        "rent_section":                 {"method": "fillna", "opt": "fill", "value": "0", "type": "str"},
+        "rent_price_section":           {"method": "fillna", "opt": "fill", "value": "0", "type": "str"},
+        "busi_open_section":            {"method": "fillna", "opt": "fill", "value": "未知区间", "type": "str"},
+        "busi_close_section":           {"method": "fillna", "opt": "fill", "value": "未知区间", "type": "str"},
+        "is_chain_storename":           {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
+        "criterion_codename":           {"method": "fillna", "opt": "fill", "value": "1-3年无违法违规", "type": "str"},
+        "market_info_codename":         {"method": "fillna", "opt": "fill", "value": "未采集", "type": "str"},
+        "tag_codename":                 {"method": "fillna", "opt": "fill", "value": "一般", "type": "str"},
+        "cooperate_codename":           {"method": "fillna", "opt": "fill", "value": "一般", "type": "str"},
+        "store_appearance_name":        {"method": "fillna", "opt": "fill", "value": "一般", "type": "str"},
+        "position_codename":            {"method": "fillna", "opt": "fill", "value": "其他", "type": "str"},
+        "sub_position_codename":        {"method": "fillna", "opt": "fill", "value": "其他", "type": "str"},
+        "zone_appraise_name":           {"method": "fillna", "opt": "fill", "value": "五类", "type": "str"},
+        "choose_road_name":             {"method": "fillna", "opt": "fill", "value": "一般", "type": "str"},
+        "choose_address_name":          {"method": "fillna", "opt": "fill", "value": "其它", "type": "str"},
+        "area_position_type_name":      {"method": "fillna", "opt": "fill", "value": "城区(市、区县、中心辖区)", "type": "str"},
+        "area_func_type_name":          {"method": "fillna", "opt": "fill", "value": "集贸地", "type": "str"},
+        "community_func_type_name":     {"method": "fillna", "opt": "fill", "value": "一般居住楼宇(成熟)", "type": "str"},
+        "rate_pay_type_name":           {"method": "fillna", "opt": "fill", "value": "一般纳税人", "type": "str"},
+        "order_cycle_type_name":        {"method": "fillna", "opt": "fill", "value": "一月一访", "type": "str"},
+        "is_modern_terminalname":       {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
+        "modern_terminal_name":         {"method": "fillna", "opt": "fill", "value": "无法识别", "type": "str"},
+        "cooperate_type_name":          {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        "terminal_star_name":           {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        "star_terminal_name":           {"method": "fillna", "opt": "fill", "value": "未分类", "type": "str"},
+        "appearance_span_section":      {"method": "fillna", "opt": "fill", "value": "0", "type": "str"},
+        "upholster_name":               {"method": "fillna", "opt": "fill", "value": "非标", "type": "str"},
+        "shop_feature_name":            {"method": "fillna", "opt": "fill", "value": "其它", "type": "str"},
+        "shop_char_type_name":          {"method": "fillna", "opt": "fill", "value": "其它", "type": "str"},
+        "has_taste_name":               {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
+        "show_area_section":            {"method": "fillna", "opt": "fill", "value": "0", "type": "str"},
+        "sign_status_name":             {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        "shopsunny_vi_name":            {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        "header_name":                  {"method": "fillna", "opt": "fill", "value": "无标识", "type": "str"},
+        "counter_status_name":          {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        "counter_number":               {"method": "fillna", "opt": "fill", "value": "0", "type": "str"},
+        "counter_put_type_name":        {"method": "fillna", "opt": "fill", "value": "无陈列", "type": "str"},
+        "back_counter_status_name":     {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        "back_counter_put_type_name":   {"method": "fillna", "opt": "fill", "value": "无陈列", "type": "str"},
+        "back_counter_style_name":      {"method": "fillna", "opt": "fill", "value": "无条烟展示板面", "type": "str"},
+        "back_counter_number":          {"method": "fillna", "opt": "fill", "value": "0", "type": "str"},
+        "back_counter_has_show_name":   {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        "legal_person_gender":          {"method": "fillna", "opt": "fill", "value": "男", "type": "str"},
+        "legal_education_name":         {"method": "fillna", "opt": "fill", "value": "初中", "type": "str"},
+        "legal_is_cpc_member":          {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
+        "operator_person_gender":       {"method": "fillna", "opt": "fill", "value": "男", "type": "str"},
+        "operator_education_name":      {"method": "fillna", "opt": "fill", "value": "初中", "type": "str"},
+        "operator_is_cpc_member":       {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
+        "market_type_name":             {"method": "fillna", "opt": "fill", "value": "农网", "type": "str"},
+        "busi_place_codename":          {"method": "fillna", "opt": "fill", "value": "其他", "type": "str"},
+        "sub_busi_codename":            {"method": "fillna", "opt": "fill", "value": "其他", "type": "str"},
+        "sub_market_type_name":         {"method": "fillna", "opt": "fill", "value": "未分类", "type": "str"},
+        "creditclass_name":             {"method": "fillna", "opt": "fill", "value": "C", "type": "str"},
+    }
+
+class ProductConfig:
+    FEATURE_COLUMNS = [
+        "product_code",                  # 商品编码
+        "factory_name",                  # 产地(工业公司名称)
+        "brand_name",                    # 品牌名称
+        "is_low_tar",                    # 低焦油卷烟
+        "is_medium",                     # 中支烟
+        "is_tiny",                       # 细支烟
+        "is_coarse",                     # 粗支烟(同时非中非细)
+        "is_exploding_beads",            # 爆珠烟
+        "is_abnormity",                  # 异形包装
+        "is_cig",                        # 雪茄烟
+        "is_chuangxin",                  # 创新品类
+        "direct_retail_price",           # 卷烟建议零售价
+        "tbc_total_length",              # 烟支总长度
+        "product_style",                 # 包装类型
+        # "flavor_type_std",                              # 香型_规范
+        # "main_color_std",                               # 主色调_规范
+        # "carton_packaging_std",                         # 条装包装_规范
+        # "packaging_type_std",                           # 包装类型_规范
+        # "opening_method_std",                           # 打开方式_规范
+        # "cigarette_paper_std",                          # 卷烟纸_规范
+        # "cigarette_holder_length_std",                  # 烟嘴长度_规范
+        # "flavor_feature_std",                           # 口味特征_规范
+        # "new_product_connotation_std",                  # 新品希望传递的品牌内涵_规范
+        # "core_competitive_advantage_std",               # 同类核心竞争优势_规范
+        # "target_consumers_std",                         # 目标消费者_规范
+        # "consumption_scenario_std",                     # 消费场景_规范
+        # "core_selling_points_std",                      # 核心卖点_规范
+        # "product_features_std",                         # 产品特征_规范
+        # "regional_market_preference_match_std",         # 区域市场偏好匹配度_规范
+        # "cigarette_holder_std",                         # 烟嘴_规范
+        # "target_competitors_std"                        # 目标竞品_规范
+    ]
+
+    ONEHOT_CAT = {
+        "factory_name":                    ["安徽中烟", "澳门云福卷烟厂", "北欧烟草集团", "博格集团", "重庆中烟", "川渝中烟", "菲利普莫里斯亚洲", 
+                                            "福建中烟", "甘肃工业", "广东中烟", "广西中烟", "贵州中烟", "海南红塔", "河北中烟", "河南中烟", 
+                                            "黑龙江工业", "红塔辽宁烟草", "湖北中烟", "湖南中烟", "吉林工业", "家源开发股份有限公司", 
+                                            "嘉莱赫国际有限公司", "江苏中烟", "江西中烟", "凯德控股有限公司", "力量雪茄烟草有限公司", 
+                                            "南洋兄弟烟草股份", "内蒙古昆明卷烟", "日本烟草(香港)有限公司", "三宝麟国际集团", "厦门调拨站", 
+                                            "山东中烟", "山西昆明烟草", "陕西中烟", "上海烟草(集团)公司", "上海烟草公司", "深圳工业", "四川中烟", 
+                                            "特富意烟草(国际)", "雪茄客烟草国际贸易有限公司", "耀莱雪茄控股有限公司", "引领国际有限公司", 
+                                            "英飞烽香港有限公司", "英美烟草中国有限公司", "云南中烟", "浙江中烟", "中茄国际贸易有限公司", 
+                                            "中烟英美烟草国际有限公司", "株式会社 KT&G", "无"],
+        "brand_name":                      ["万宝路", "555", "骆驼(国外)", "大华", "娇子", "大青山", "龙凤呈祥", "黄鹤楼", "真龙", "七匹狼", 
+                                            "芙蓉王", "双喜(广)", "贵烟", "钓鱼台", "红双喜(南洋)", "云烟", "蒙特", "富恩特", "拉·加莱拉", "苏烟", 
+                                            "丹纳曼", "黄山", "南京", "利群", "金桥", "泰山", "好日子", "石林", "美登", "红河", "嘉辉", "七星", 
+                                            "都彭", "天下秀", "长城", "高希霸", "钻石", "金圣", "王冠雪茄", "黄金叶", "中南海", "长白山", "红旗渠", 
+                                            "建牌", "大卫杜夫", "罗密欧", "茂大", "红金龙", "天子", "熊猫", "双喜(深)", "大前门", "兰州", 
+                                            "红双喜(沪)", "雄狮", "广州", "红玫王", "黄果树", "红塔山", "福", "小熊猫", "爱喜", "蒙特利", "玉溪", 
+                                            "都宝", "麦克纽杜", "卡里罗", "中华", "牡丹(沪)", "阿里山", "顺百利", "白沙", "羊城", "白云", 
+                                            "特美思", "国宾", "帕特加", "比德奥", "冬虫夏草", "威龙(湛江)", "香格里拉", "红梅", "延安", 
+                                            "特富意", "石狮", "金香港", "好猫", "登喜路", "乐迪", "林海灵芝", "椰树", "北京", "大红鹰", "大丰收", 
+                                            "红双喜(武汉)", "五叶神", "狮", "优民", "将军", "遵义", "恒大", "飞马", "红三环", "芙蓉", "工字", 
+                                            "古田", "狮牌", "君力", "哈尔滨", "梦都", "香梅(阜阳)", "哈德门", "梅州", "红山茶", "猴王", "沙龙", 
+                                            "潘趣", "狮子牌", "上海", "红玫", "醒宝", "广州湾", "百乐门", "关塔那摩", "威斯", "五一", "寿百年", 
+                                            "人民大会堂", "土楼", "三沙", "西湖", "光明", "阿诗玛", "宝亨", "恭贺新禧", "长寿", "茶花", "迎客松", 
+                                            "龙烟", "金澳门", "宝岛", "多米尼加之花", "国喜", "金驼", "君特欧", "上游", "幸福", "春城", "吉庆", 
+                                            "黄山松", "黄金龙", "紫气东来", "彼亚赛", "银辉", "潮牌", "庐山", "三峡", "壹支笔", "双叶", "无"],
+        "is_low_tar":                      ["是", "否"],
+        "is_medium":                       ["是", "否"],
+        "is_tiny":                         ["是", "否"],
+        "is_coarse":                       ["是", "否"],
+        "is_exploding_beads":              ["是", "否"],
+        "is_abnormity":                    ["是", "否"],
+        "is_cig":                          ["是", "否"],
+        "is_chuangxin":                    ["是", "否"],
+        "direct_retail_price":             ["0-5", "5-10", "10-15", "15-20", "20-26", "26-30", "30-40",
+                                            "40-50", "50-65", "65-80", "80-100", "100以上", "5-9.9", "10-19.9",
+                                            "20-29.9", "30-39.9", "40-49.9", "50-59.9", "60-69.9", "70-79.9", "80-89.9",
+                                            "90-99.9", "100-109.9", "110-119.9", "120-129.9", "130-139.9", "140-149.9",
+                                            "150-199.9", "200-249.9", "250-499.9", "500以上"],
+        "tbc_total_length":                ["小于79", "80-88", "89-100", "大于120"],
+        "product_style":                   ["条盒硬盒", "条包硬盒", "条盒软盒", "条包软盒", "铁盒", "其他"],
+        # "flavor_type_std": [
+        #     "醇香", "清甜香", "清香", "果香", "焦甜香", "烤烟", "原香", "荷香", 
+        #     "本香", "草本香", "甜香", "混合", "薄荷", "陈皮香", "奶甜香", 
+        #     "浓香", "松香", "药香", "高香", "咖香", "茶香", "外香", "酒香", "无"
+        # ],
+        # "main_color_std": [
+        #     "红色", "黄色", "白色", "蓝色", "金色", "黑色", "紫色", "绿色", "灰色", 
+        #     "青色", "金黄色", "明黄色", "深蓝色", "淡黄色", "米黄色", "咖啡色", 
+        #     "橙色", "褐色", "浅绿色", "青绿色", "香槟金色", "咖色", "墨绿色", 
+        #     "银色", "咖红色", "红金色", "蓝金色", "湖蓝色", "金红色", "米白色", 
+        #     "浅咖色", "蓝白色", "黑白灰色", "浅蓝色", "深棕色", "粉绿色", "米色", 
+        #     "蓝黑色", "深绿色", "矿青色", "铜青色", "孔雀绿色", "褐红色", "玫瑰红色", 
+        #     "玫瑰金色", "银灰色", "藏蓝色", "星空蓝色", "深咖啡色", "灰白色", 
+        #     "青黛色", "正红色", "银绿色", "绛紫色", "海边玻璃蓝色", "乳白色", 
+        #     "紫蓝色", "橙蓝色", "深红色", "马尔斯绿色", "无"
+        # ],
+        # "carton_packaging_std": [
+        #     "常规", "木盒", "硬盒", "标细", "中支", "全开式", "纵开式", "细支", "常规(异形)", "无"
+        # ],
+        # "packaging_type_std": [
+        #     "硬包", "软包", "硬盒", "双中支", "软包硬化", "无"
+        # ],
+        # "opening_method_std": [
+        #     "常规", "侧开", "全开式", "提拔式", "无"
+        # ],
+        # "cigarette_paper_std": [
+        #     "常规", "白色", "功能型", "横罗纹", "竖纹", "全麻", "横纹", "特殊工艺", 
+        #     "颜色", "黑色", "高克重", "半麻", "螺纹", "棕色", "横螺纹", "味道", 
+        #     "含麻", "烟草本香卷烟纸", "五星中空滤嘴", "黄色", "无"
+        # ],
+        # "cigarette_holder_length_std": [
+        #     "20(不含)-25", "25(不含)-30", "30(不含)-100", "无"
+        # ],
+        # "flavor_feature_std": [
+        #     "醇厚", "细腻", "烟草本香", "舒适", "清香", "纯净", "柔和", "甜润", 
+        #     "清甜", "浓郁", "绵长", "顺滑", "低刺激", "回甘", "满足感强", "轻松", 
+        #     "饱满", "果香", "焦甜", "干净", "劲头适中", "劲头大", "清新", "花香", 
+        #     "甘润", "自然", "醇和", "无"
+        # ],
+        # "new_product_connotation_std": [
+        #     "品味", "经典", "时尚", "成功", "探索", "文化", "品质", "传承", 
+        #     "自然", "创新", "尊贵", "健康", "喜庆", "活力", "年轻", "科技", "匠心", "无"
+        # ],
+        # "core_competitive_advantage_std": [
+        #     "口感好", "性价比高", "技术创新", "品牌文化", "舒适度高", "香气独特", 
+        #     "经典传承", "工艺先进", "品质优", "原料优质", "低焦低害", "包装设计", 
+        #     "满足感强", "无"
+        # ],
+        # "target_consumers_std": [
+        #     "普通消费者", "年轻群体", "高端消费者", "中年群体", "商务人士", "追求品质", 
+        #     "中端消费者", "男女皆宜", "白领", "男性为主", "追求时尚", "追求性价比", 
+        #     "企业家", "中老年群体", "公务员", "无"
+        # ],
+        # "consumption_scenario_std": [
+        #     "日常自吸", "商务接待", "休闲娱乐", "礼品消费", "宴会用烟", "夜场消费", 
+        #     "婚庆用烟", "节日送礼", "无"
+        # ],
+        # "core_selling_points_std": [
+        #     "包装设计", "独特风味", "工艺创新", "原料精选", "品牌文化", "口感舒适", 
+        #     "身份象征", "满足感强", "性价比高", "低焦减害", "无"
+        # ],
+        # "product_features_std": [
+        #     "追求品质", "性价比", "新奇体验", "经典传承", "低焦健康", "时尚潮流", 
+        #     "高端奢华", "商务风格", "无"
+        # ],
+        # "regional_market_preference_match_std": [
+        #     "高GDP地区", "娱乐发达城市", "一线城市", "旅游城市", "二线城市", 
+        #     "三四线城市", "经济发达城市", "新兴产业城市", "传统工业城市", "无"
+        # ],
+        # "cigarette_holder_std": [
+        #     "常规", "爆珠", "复合滤棒", "中空", "视觉设计", "加香", "镂空", "甜味", 
+        #     "颗粒", "印花", "活性炭", "无"
+        # ],
+        # "target_competitors_std": [
+        #     "荷花、黄鹤楼、芙蓉王、南京", "芙蓉王(硬中支)", "黄鹤楼、南京、双喜", 
+        #     "中华", "钻石(荷花)", "利群(新版)", "中华(双中支)", "芙蓉王(硬)", 
+        #     "健牌、七星", "高价卷烟", "南京(炫赫门)", "贵烟(跨越)", "中华(软)、中华(双中支)", 
+        #     "黄鹤楼(视窗)", "中华(金细支)", "芙蓉王(硬细支)", "玉溪(软)", "黄金叶(商鼎)", 
+        #     "煊赫门", "荷花", "南京(雨花石)", "天子(中支)", "云烟(细支云龙)", 
+        #     "黄金叶(商鼎)、七匹狼(纯境)", "双喜(硬经典1906)", "七匹狼(纯境)", "云烟(紫)", 
+        #     "利群(西子阳光)", "中华(金中支)", "七匹狼(软灰)", "荷花细支", "紫云", 
+        #     "黄鹤楼、芙蓉王、南京", "和天下", "蓝利群", "硬中华", "软中华", 
+        #     "硬冰爵、硬8°、大观园冰爆", "万宝路、爱喜、箭牌、555", "无"
+        # ]
+    }
+    CLEANING_RULES = {
+        "factory_name":                             {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        "brand_name":                               {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        "is_low_tar":                               {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
+        "is_medium":                                {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
+        "is_tiny":                                  {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
+        "is_coarse":                                {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
+        "is_exploding_beads":                       {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
+        "is_abnormity":                             {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
+        "is_cig":                                   {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
+        "is_chuangxin":                             {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
+        "direct_retail_price":                      {"method": "fillna", "opt": "fill", "value": "0-5", "type": "str"},
+        "tbc_total_length":                         {"method": "fillna", "opt": "fill", "value": "小于79", "type": "str"},
+        "product_style":                            {"method": "fillna", "opt": "fill", "value": "其他", "type": "str"},
+
+        # "flavor_type_std":                          {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        # "main_color_std":                           {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        # "carton_packaging_std":                     {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        # "packaging_type_std":                       {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        # "opening_method_std":                       {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        # "cigarette_paper_std":                      {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        # "cigarette_holder_length_std":              {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        # "flavor_feature_std":                       {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        # "new_product_connotation_std":              {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        # "core_competitive_advantage_std":           {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        # "target_consumers_std":                     {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        # "consumption_scenario_std":                 {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        # "core_selling_points_std":                  {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        # "product_features_std":                     {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        # "regional_market_preference_match_std":     {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        # "cigarette_holder_std":                     {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+        # "target_competitors_std":                   {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
+    }
+
+class OrderConfig:
+    FEATURE_COLUMNS = [
+        "cust_code",                      # 零售户编码
+        "product_code",                   # 品牌规格编码
+        "sale_qty",                       # 销量包
+        # "sale_qty_l",                     # 销量上期
+        # "sale_qty_hb",                    # 销量环比
+        # "sale_amt",                       # 销售额包
+    ]
+
+class OrderAnalysisConfig:
+    FEATURE_COLUMNS = [
+        "cust_code",                        # 商户编码
+        "product_code",                     # 品规编码
+        "order_number_stability",           # 订购次数稳定性
+        "order_quantity_stability",         # 订购量稳定性
+        "order_ratio_stability",            # 订购占比稳定性
+        "real_demand_stability"             # 真实需求稳定性
+    ]
+
+class ImportanceFeaturesMap:
+    CUSTOM_FEATURES_MAP = {
+        "busi_place_area_section":      "营业面积区间",
+        "rent_section": "租金区间",
+        "rent_price_section": "租金单价区间",
+        "busi_open_section": "营业开始时间区间",
+        "busi_close_section": "营业结束时间区间",
+        "is_chain_storename": "是否连锁",
+        "criterion_codename": "守法经营情况",
+        "market_info_codename":             "市场采集点情况",
+        "tag_codename":                     "卷烟价格执行情况",
+        "cooperate_codename":               "配合程度",
+        "store_appearance_name":            "店面形象",
+        "position_codename":                "商圈名称",
+        "sub_position_codename":            "次级商圈名称",
+        "zone_appraise_name":               "地段评价",
+        "choose_road_name":                 "路段评价",
+        "choose_address_name":              "选址",
+        "area_position_type_name":          "区域位置划分",
+        "area_func_type_name":              "区域功能划分",
+        "community_func_type_name":         "社区功能划分",
+        "rate_pay_type_name":               "纳税性质",
+        "order_cycle_type_name":            "订货周期",
+        "is_modern_terminalname":           "是否现代终端",
+        "modern_terminal_name":             "现代终端类型",
+        "cooperate_type_name":              "加盟类型",
+        "terminal_star_name":               "终端星级",
+        "star_terminal_name":               "星级终端类型",
+        "appearance_span_section":          "门面跨度区间",
+        "upholster_name":                   "店内装潢名称",
+        "shop_feature_name":                "门店特色名称",
+        "shop_char_type_name":              "经营特色名称",
+        "has_taste_name":                   "是否卷烟品吸区",
+        "show_area_section":                "卷烟成列面积区间",
+        "sign_status_name":                 "是否有店招门头(店招门头状态)",
+        "shopsunny_vi_name":                "现代终端VI门头名称",
+        "header_name":                      "门头标识",
+        "counter_status_name":              "地柜状态",
+        "counter_number":                   "地柜个数",
+        "counter_put_type_name":            "地柜陈列样式",
+        "back_counter_status_name":         "背柜状态",
+        "back_counter_put_type_name":       "背柜陈列样式",
+        "back_counter_style_name":          "背柜样式",
+        "back_counter_number":              "背柜个数",
+        "back_counter_has_show_name":       "背柜条烟陈列区状态",
+        "legal_person_gender":              "法人性别",
+        "legal_education_name":             "法人文化程度",
+        "legal_is_cpc_member":              "法人是否为党员",
+        "operator_person_gender":           "经营者性别",
+        "operator_education_name":          "经营者文化程度",
+        "operator_is_cpc_member":           "经营者是否为党员",
+        "market_type_name":                 "市场类型名称",
+        "busi_place_codename":              "经营业态名称",
+        "sub_busi_codename":                "业态细分名称",
+        "sub_market_type_name":             "城乡分类名称",
+        "creditclass_name":                 "信用等级名称",
+    }
+    
+    PRODUCT_FEATRUES_MAP = {
+        "factory_name":              "产地",
+        "brand_name":                "品牌名称",
+        "is_low_tar":                "低焦油卷烟",
+        "is_medium":                 "中支烟",
+        "is_tiny":                   "细支烟",
+        "is_coarse":                 "粗支烟",
+        "is_exploding_beads":        "爆珠烟",
+        "is_abnormity":              "异形包装",
+        "is_cig":                    "雪茄烟",
+        "is_chuangxin":              "创新品类",
+        "direct_retail_price":       "卷烟建议零售价",
+        "tbc_total_length":          "烟支总长度",
+        "product_style":             "包装类型",
+    }
+    
+class DeliveryConfig:
+    FEATURE_COLUMNS = [
+        "customer_code",            # 零售户代码
+        "goods_code",               # 卷烟代码
+        "retail_index_week",        # 周市场零售价格监测指数
+        "turnover_rate_collpoint",  # 采集点销售量动销率(周)
+        "turnover_rate_terminal",   # 零售终端销售量动销率(周)
+        "sale_qty",                 # 周销售量
+    ]
+    
+    CLEANING_RULES = {
+        "retail_index_week":                    {"method": "fillna", "opt": "fill", "value": 0.0000, "type": "num"},
+        "turnover_rate_collpoint":              {"method": "fillna", "opt": "fill", "value": 0.0000, "type": "num"},
+        "turnover_rate_terminal":               {"method": "fillna", "opt": "fill", "value": 0.0000, "type": "num"},
+        "sale_qty":                             {"method": "fillna", "opt": "fill", "value": 0, "type": "num"},
+    }
+    
+    FEATURES_MAP = {
+        "retail_index_week": "市场零售价格监测指数(周)",
+        "turnover_rate_collpoint": "采集点销售量动销率(周)",
+        "turnover_rate_terminal": "零售终端销售量动销率(周)",
+        "sale_qty": "周销售量"
     }

+ 0 - 640
models/rank/data/config_new.py

@@ -1,640 +0,0 @@
-class CustConfig:
-    FEATURES_COLUMNS = [
-        "cust_code",                    # 零售户编码
-        "busi_place_area_section",      # 营业面积区间
-        "rent_section",                 # 租金区间
-        "rent_price_section",           # 租金单价区间
-        "busi_open_section",            # 营业开始时间区间
-        "busi_close_section",           # 营业结束时间区间
-        "is_chain_storename",           # 是否连锁
-        "criterion_codename",           # 守法经营情况
-        "market_info_codename",         # 市场采集点情况
-        "tag_codename",                 # 卷烟价格执行情况
-        "cooperate_codename",           # 配合程度
-        "store_appearance_name",        # 店面形象
-        "position_codename",            # 商圈名称
-        "sub_position_codename",        # 次级商圈名称
-        "zone_appraise_name",           # 地段评价
-        "choose_road_name",             # 路段评价
-        "choose_address_name",          # 选址
-        "area_position_type_name",      # 区域位置划分
-        "area_func_type_name",          # 区域功能划分
-        "community_func_type_name",     # 社区功能划分
-        "rate_pay_type_name",           # 纳税性质
-        "order_cycle_type_name",        # 订货周期
-        "is_modern_terminalname",       # 是否现代终端
-        "modern_terminal_name",         # 现代终端类型
-        "cooperate_type_name",          # 加盟类型
-        "terminal_star_name",           # 终端星级
-        "star_terminal_name",           # 星级终端类型
-        "appearance_span_section",      # 门面跨度区间
-        "upholster_name",               # 店内装潢名称
-        "shop_feature_name",            # 门店特色名称
-        "shop_char_type_name",          # 经营特色名称
-        "has_taste_name",               # 是否卷烟品吸区
-        "show_area_section",            # 卷烟成列面积区间
-        "sign_status_name",             # 是否有店招门头(店招门头状态)
-        "shopsunny_vi_name",            # 现代终端VI门头名称
-        "header_name",                  # 门头标识
-        "counter_status_name",          # 地柜状态
-        "counter_number",               # 地柜个数
-        "counter_put_type_name",        # 地柜陈列样式
-        "back_counter_status_name",     # 背柜状态
-        "back_counter_put_type_name",   # 背柜陈列样式
-        "back_counter_style_name",      # 背柜样式
-        "back_counter_number",          # 背柜个数
-        "back_counter_has_show_name",   # 背柜条烟陈列区状态
-        "legal_person_gender",          # 法人性别
-        "legal_education_name",         # 法人文化程度
-        "legal_is_cpc_member",          # 法人是否为党员
-        "operator_person_gender",       # 经营者性别
-        "operator_education_name",      # 经营者文化程度
-        "operator_is_cpc_member",       # 经营者是否为党员
-        "market_type_name",             # 市场类型名称
-        "busi_place_codename",          # 经营业态名称
-        "sub_busi_codename",            # 业态细分名称
-        "sub_market_type_name",         # 城乡分类名称
-        "creditclass_name",             # 信用等级名称
-    ]
-
-    ONEHOT_CAT = {
-        "busi_place_area_section":      ["0", "10(含)㎡以下", "10-20(含)㎡", "20-30(含)㎡", "30-40(含)㎡", "40-50(含)㎡", "50-60(含)㎡", 
-                                         "60-70(含)㎡", "70-80(含)㎡", "80-90(含)㎡", "90-100(含)㎡", "100㎡以上"],
-        "rent_section":                 ["0", "500(含)元以下", "500-1000(含)元", "1000-1500(含)元", "1500-2000(含)元", "2000-2500(含)元", 
-                                         "2500-3000(含)元", "3000-3500(含)元", "3500-4000(含)元", "4000-4500(含)元", "4500-5000(含)元", "5000元以上"],
-        "rent_price_section":           ["0", "500(含)元/㎡以下", "500-1000(含)元/㎡", "1000-1500(含)元/㎡", "1500-2000(含)元/㎡", "2000-2500(含)元/㎡", 
-                                         "2500-3000(含)元/㎡", "3000-3500(含)元/㎡", "3500-4000(含)元/㎡", "4000-4500(含)元/㎡", "4500-5000(含)元/㎡", "5000元/㎡以上"],
-        "busi_open_section":            ["未知区间", "0:00~1:00", "1:00~2:00", "2:00~3:00", "3:00~4:00", "4:00~5:00", "5:00~6:00", "6:00~7:00", "7:00~8:00", "8:00~9:00", 
-                                         "9:00~10:00", "10:00~11:00", "11:00~12:00", "12:00~13:00", "13:00~14:00", "14:00~15:00", "15:00~16:00", "16:00~17:00", "17:00~18:00", 
-                                         "18:00~19:00", "19:00~20:00", "20:00~21:00", "21:00~22:00", "22:00~23:00", "23:00~0:00"],
-        "busi_close_section":           ["未知区间", "0:00~1:00", "1:00~2:00", "2:00~3:00", "3:00~4:00", "4:00~5:00", "5:00~6:00", "6:00~7:00", "7:00~8:00", "8:00~9:00", 
-                                         "9:00~10:00", "10:00~11:00", "11:00~12:00", "12:00~13:00", "13:00~14:00", "14:00~15:00", "15:00~16:00", "16:00~17:00", "17:00~18:00", 
-                                         "18:00~19:00", "19:00~20:00", "20:00~21:00", "21:00~22:00", "22:00~23:00", "23:00~0:00"],
-        "is_chain_storename":           ["是", "否"],
-        "criterion_codename":           ["1年以内无违法违规情况", "1-3年无违法违规", "3年以上无违法违规情况", "违规"],
-        "market_info_codename":         ["未采集", "很好", "较好", "一般", "差"],
-        "tag_codename":                 ["很好", "较好", "一般", "差"],
-        "cooperate_codename":           ["好", "较好", "一般"],
-        "store_appearance_name":        ["好", "较好", "一般", "差"],
-        "position_codename":            ["交通枢纽区", "商业娱乐区", "办公区", "院校学区", "旅游景区", "集贸区", "居民区", "工业区", "农林渔牧区", "其他"],
-        "sub_position_codename":        ["交通枢纽区-高铁站", "交通枢纽区-车站", "交通枢纽区", "商业娱乐区", "办公区", "院校学区", "旅游景区", "集贸区", "居民区", "工业区", "农林渔牧区", "其他"],
-        "zone_appraise_name":           ["一类", "二类", "三类", "四类", "五类"],
-        "choose_road_name":             ["特别繁华", "繁华", "一般", "偏僻"],
-        "choose_address_name":          ["客流密集区", "要道", "社区", "其它"],
-        "area_position_type_name":      ["城区(市、区县、中心辖区)", "镇区1(有建制的乡镇政府所在地)", "镇区2(撤乡并镇取消的原乡政府所在地)", "镇区3(城乡结合部)", 
-                                         "农村1(经济发展较好的农村)", "农村2(经济发展较差的农村)", "农村3(经济发展一般的农村)", "农村4(新农村)"],
-        "area_func_type_name":          ["商贸中心(CBD)", "商贸功能区", "集贸地", "旅游景点", "学区(大专院校、培训机构)", "产业园区2(成熟)", "产业园区1(新兴、在建)", "大型厂、矿区"],
-        "community_func_type_name":     ["高档居住楼宇(成熟)", "高档居住楼宇(新兴、在建)", "一般居住楼宇(成熟)", "一般居住楼宇(新兴、在建)", 
-                                         "商住多用楼宇(成熟)", "商住多用楼宇(新兴、在建)", "政务办公楼宇"],
-        "rate_pay_type_name":           ["一般纳税人", "小规模纳税人", "小规模纳税人(个体)"],
-        "order_cycle_type_name":        ["一周一访", "两周一访", "四周一访", "六周一访", "一月两访", "一月一访", "暂失去联系", "暂不供货"],
-        "is_modern_terminalname":       ["是", "否"],
-        "modern_terminal_name":         ["直营终端", "合作终端", "加盟终端", "一般现代终端", "普通终端", "无法识别"],
-        "cooperate_type_name":          ["品牌加盟", "冠名加盟", "无"],
-        "terminal_star_name":           ["五星终端", "四星终端", "三星终端", "二星终端", "一星终端", "其他", "无"],
-        "star_terminal_name":           ["星级终端", "整改星级终端", "一般终端", "非星级终端", "未分类"],
-        "appearance_span_section":      ["8米以上", "7-8(含)米", "6-7(含)米", "5-6(含)米", "4-5(含)米", "3-4(含)米", "2-3(含)米", "2(含)米以下", "0"],
-        "upholster_name":               ["全面打造", "参标", "非标"],
-        "shop_feature_name":            ["临街橱窗,消费体验区", "临街橱窗", "消费体验区", "其它", "临街橱窗,其它", "消费体验区,临街橱窗", "其它,临街橱窗", 
-                                         "临街橱窗,消费体验区,其它", "其它,消费体验区", "消费体验区,其它,临街橱窗", "其它,临街橱窗,消费体验区", "消费体验区,其它", 
-                                         "其它,消费体验区,临街橱窗", "消费体验区,临街橱窗,其它", "临街橱窗,其它,消费体验区"],
-        "shop_char_type_name":          ['酒,茶,糖,其它', '糖,其它', '酒,茶,糖,特产', '酒,茶', '酒,糖,特产', '酒', '酒,茶,糖,特产,其它', '其它', '酒,茶,糖', 
-                                         '茶,酒', '酒,茶,特产,糖', '茶,酒,特产', '糖,特产', '茶,糖', '特产,糖', '糖,茶,酒', '酒,茶,其它', '酒,特产', '特产,其它',
-                                         ' 糖', '酒,茶,糖,服务,其它', '茶,酒,糖,其它', '服务', '服务,酒,其它', '酒,其它', '服务,茶,糖', '彩票', '餐饮', '餐饮,服务,其它,茶', 
-                                         '酒,糖,其它', '酒,服务,茶', '糖,特产,其它', '服务,其它', '茶,酒,其它', '糖,酒', '酒,糖', '茶,酒,糖,特产', '酒,茶,特产', '其它,糖', 
-                                         '酒,糖,茶,特产', '茶', '酒,糖,服务,其它', '特产', '糖,酒,茶,特产', '餐饮,其它', '酒,糖,特产,其它', '酒,茶,特产,其它', '其它,茶', 
-                                         '茶,糖,特产,酒', '酒,服务,其它', '其它,服务', '茶,糖,特产', '茶,特产,餐饮,服务,其它', '茶,其它', '酒,茶,糖,特产,服务', '其它,特产,糖,酒', 
-                                         '其它,酒', '酒,特产,其它', '其它,酒,服务', '糖,茶', '其它,特产,糖,茶,酒', '酒,茶,彩票', '特产,服务,其它', '酒,糖,茶', '餐饮,服务', 
-                                         '特产,酒', '酒,茶,服务', '酒,其它,特产', '其它,酒,茶,糖', '茶,特产,酒', '茶,酒,糖', '酒,特产,服务', '酒,服务', '彩票,糖', '酒,茶,糖,服务', 
-                                         '茶,糖,酒', '餐饮,酒', '酒,茶,糖,其它,服务', '茶,特产', '酒,茶,糖,其它,特产', '茶,糖,其它,酒', '酒,特产,服务,其它', '酒,茶,特产,糖,其它,服务',
-                                         '糖,其它,酒', '酒, 餐饮,服务', '酒,茶,糖,特产,服务,其它', '特产,酒,茶', '酒,茶,其它,糖', '茶,糖,其它', '茶,特产,其它', 
-                                         '酒,茶,糖,餐饮,服务,其它', '糖,特产,茶,酒', '酒,茶,特产,服务', '酒,茶,糖,特产,餐饮', '服务,特产,酒', '酒,茶,其它,特产', 
-                                         '酒,茶,糖,特产,餐饮,服务,其它', '茶,彩票', '茶,糖,酒,特产', '特产,茶,酒', '特产,茶', '糖,特产,酒,茶', '特产,糖,茶,酒', '服务,茶,酒', 
-                                         '其它, 酒,茶', '酒,茶,糖,特产,服务,餐饮,其它', '酒,糖,茶,特产,其它', '茶,酒,特产,其它', '酒,茶,服务,其它', '服务,餐饮,酒', '茶,其它,特产', 
-                                         '糖,特产,茶', '茶,酒,特产,糖', '酒,茶,糖,餐饮,服务', '酒,茶,糖,彩票', '服务,酒', '糖,酒,其它', '酒,彩票,茶', '其它,特产', '糖,服务', 
-                                         '茶,酒,糖,特产,其它', '酒,其它,茶', '酒,糖,餐饮', '酒,茶,糖,特产,彩票,餐饮,服务,其它', '特产,糖,茶', '其它,特产,酒,茶', '其它,酒,茶,特产', 
-                                         '酒,糖,特产,服务', '茶,糖,服务', '糖,其它,酒,茶', '茶,酒,特产,服务', '酒,茶,特产,服务,其它', '糖,特产,酒', '酒,糖,特产,茶', '特产,餐饮,服务',
-                                         '餐饮,服务,其它', '其它,茶,酒', '其它,酒,糖', '其它,糖,酒', '酒,茶,特产,餐饮,服务', '茶,糖,特产,其它', '其它,酒,茶,糖,特产', 
-                                         '酒,茶,特产,糖,其它', '服务,酒,茶,糖', '酒,其它, 糖', '特产,茶,酒,糖', '服务,酒,糖', '糖,酒,茶,其它', '酒,特产,糖', '糖,茶,酒,其它', 
-                                         '糖,其它,特产', '糖,茶,其它', '其它,糖,茶,酒', '服务,酒,茶,糖,特产,其它', '茶,特产,酒,其它', '酒,茶,服务,特产', '酒,糖,其它,特产', 
-                                         '特产,酒,其它', '茶,糖,特产,服务', '餐饮,特产', '糖,酒,特产', '糖,酒,餐饮', '酒,特产,茶', '其它,茶,糖,酒', '酒,茶,糖,特产,彩票', '服务,特产',
-                                         '特产,服务', '糖,酒,茶', '酒,糖,特产,服务,其它', '糖,茶,酒,特产', '特产,茶,其它', '酒,特产,糖,茶', '茶,其它,糖', '餐饮,酒, 茶',
-                                         '茶,特产,糖,酒', '彩票,其它', '酒,特产,餐饮,服务,其它', '酒,茶,糖,特产,餐饮,服务', '特产,彩票', '特产,糖,酒,茶', ' 茶,糖,酒,其它',
-                                         '酒,茶,糖,餐饮', '酒,糖,餐饮,服务,特产', '茶,糖,餐饮,其它', '酒,茶,特产,其它,服务', '彩票,糖,酒', '酒,其它,茶,糖', '其它,糖,茶', '特产,酒,糖',
-                                         '特产,糖,餐饮,服务', '酒,餐饮,服务,其它', '特产,糖,茶,其它', '糖,茶,特产', '酒,茶,糖,特产,彩票,餐饮,服务', '酒,茶,糖,特产,彩票,其它',
-                                         '其它,糖,酒,茶', '其它,糖,茶,酒,特产', '酒,糖,服务', '酒,餐饮', '糖,茶,酒,特产,其它', '其它,餐饮', '茶,糖,特产,其它,酒',
-                                         '酒,茶,特产,餐饮,其它', '服务,糖,酒', '服务,餐饮', '特产,糖,其它', '特产,酒,茶,糖,其它', '特产,酒,糖,其它', '酒,茶,餐饮,其它',
-                                         '其它,服务,餐饮', '茶,酒,其它,服务', '茶,其它,特产,酒', '酒,特产,茶,糖,服务,其它', '酒,茶,糖,特产,其它,餐饮', '酒,其它,服务',
-                                         '酒,特产,茶,糖', '特产,酒,茶,糖,服务,其它', '酒,糖,茶,其它', '糖,其它,茶', '服务,茶,酒,其它', '酒,茶,特产,餐饮,糖', '茶,酒,餐饮,服务,其它',
-                                         '酒,特产,茶,其它', '餐饮,糖,其它', '酒,茶,餐饮,服务', '彩票,特产', '茶,酒,糖,服务', '茶,酒,服务', '酒,茶,糖,特产,其它,服务', '服务,酒,其它,茶',
-                                         '茶,特产,服务,其它', '茶,服务,特产', '糖,特产,酒,其它', '酒,餐饮,其它', '酒,糖,餐饮,其它', '酒,特产,彩票,服务', '服务,糖,茶', '服务,糖,其它', 
-                                         '茶,特产,糖', '特产,糖,酒', '酒,糖,其它,服务', '茶,糖,彩票', '特产,酒,茶,糖', '特产,茶,酒,其它', '茶,特产, 其它,酒,糖', '其它,特产,糖,酒,茶', 
-                                         '茶,糖,酒,彩票', '其它,茶,服务', '服务,特产,糖,茶,酒', '餐饮,酒,茶,糖', '特产,酒,服务,其它', '酒,茶,餐饮', '特产,糖,餐饮', '特产,服务,糖', 
-                                         '彩票,酒,茶', '其它,特产,糖', '酒,茶,其它,服务,特产', '茶,糖,特产,酒,其它', '服务,酒,糖,特产,其它', '酒,茶,其它,服务', '酒,茶,服务,餐饮,其它',
-                                         '茶,糖,彩票,餐饮,服务,其它', '餐饮,酒,其它', '其它,茶,糖', '特产,其它,酒,茶,糖', '茶,服务', '酒,茶,糖,特产,彩票,餐饮,其它', '特产,服务,茶,酒',
-                                         '服务,其它,酒', '餐 饮,糖,酒', '服务,酒,糖,其它,特产', '其它,茶,特产', '茶,特产,服务', '茶,特产,餐饮,服务', '酒,茶,其它,餐饮', '茶,餐饮', 
-                                         ' 茶,酒,特产,糖,其它', '茶,酒,糖,特产,彩票', '彩票,酒,茶,糖', '服务,糖,特产,其它', '服务,酒,茶', '其它,茶,糖,特产', '茶,酒,彩票', 
-                                         '特产,茶,糖,其它', '酒,茶,糖,特产,彩票,服务,其它,餐饮', '特产,茶,糖', '酒,糖,茶,服务', '茶,其它,酒', '茶,酒,特产,彩票', '酒,茶,特产,彩票', 
-                                         '茶,服务,其它', '茶,酒,糖,服务,特产', '糖,酒,服务,其它', '其它,茶,酒,糖', '酒,茶,彩票,糖,服务,其它', '茶,糖,酒,其它,服务', '服务,茶,酒,特产', 
-                                         '糖,其它,服务', '糖,茶,餐饮', '茶,糖,特产,餐饮,服务', '其它,服务,酒,茶', '茶,酒,糖,服务,其它', '特产,糖,茶,酒,其它', '糖,茶,特产,其它', 
-                                         '其它,茶,酒,糖,特产', '酒,餐饮,茶', '服务,酒,茶,特产,糖,其它', '糖,酒,茶,服务', '糖,酒,特产,其它', '酒,特产,餐饮,服务', '糖,其它,酒,特产', 
-                                         '酒,茶,特产,餐饮', '酒,茶,糖,彩票,服务', '彩票,餐饮,服务', '服务,酒,特产', '酒,服务,餐饮', '茶,糖,酒,特产,餐饮', '酒,其它,糖,茶', 
-                                         '餐饮,特产,服务,其它', '糖,特产,服务', '酒,茶,特产,糖,服务', '特产,酒,服务', '糖,其它,茶,酒,特产', '特产,酒,茶,服务', '餐饮,其它,服务', 
-                                         '酒,茶,糖,彩票,服务,其它', '其它,特产,酒', '特产,餐饮,服务,茶,糖', '服务,酒,茶,特产,其它', '糖,餐饮,酒,其它', '茶,餐饮,服务', 
-                                         '其 它,酒,茶,糖,特产,服务', '服务,酒,茶,糖,特产', '其它,糖,酒,服务', '其它,特产,糖,茶', '服务,其它,糖,茶', '茶,糖,酒,特产,其它', '彩票,茶', 
-                                         '茶,酒,其它,糖', '茶,餐饮,酒', '其它,糖,酒,特产', '酒,茶,糖,服务,特产', '茶,特产,其它,服务', '糖,茶,酒, 服务', '酒,茶,其它,服务,餐饮,特产,糖',
-                                         '特产,其它,茶', '其它,特产,茶,酒', '酒,糖,特产,餐饮,服务,其它', '特产,餐饮', '特 产,其它,糖', '其它,糖,特产,茶,酒', '服务,糖,特产,茶,酒', 
-                                         '特产,其它,酒', '特产,糖,茶,酒,服务', '酒,特产,餐饮,其它', '特 产,其它,服务,糖,酒,茶', '酒,特产,茶,服务', '茶,糖,酒,服务', '其它,彩票', 
-                                         '餐饮,服务,糖', '酒,彩票,其它', '糖,特产,其它, 茶', '糖,茶,酒,特产,餐饮', '彩票,茶,酒', '其它,服务,酒,茶,糖,特产', '酒,特产,餐饮,茶', 
-                                         '酒,茶,彩票,其它', '茶,特产,酒,糖', '服务,餐饮,其它', '服务,特产,糖', '酒,糖,特产,其它,服务', '餐饮,茶,酒', '酒,茶,糖,特产,服务,彩票,其它', 
-                                         '茶,酒,餐饮', '糖,茶,酒,其它,特产', '茶,酒,彩票,其它', '服务,其它,酒,糖', '糖,服务,其它', '酒,特产,糖,茶,其它', '特产,其它,酒,茶,糖, 服务', 
-                                         '糖,茶,特产,餐饮,服务', '酒,茶,餐饮,服务,其它', '其它,特产,服务', '特产,酒,茶,糖,服务,餐饮', '酒,糖,茶,餐饮,服务,其它', '服务,酒,茶,糖,其它', 
-                                         '酒,特产,其它,糖,茶', '其它,餐饮,服务', '其它,酒,茶,糖,特产,彩票', '茶,酒,服务,餐饮', '糖, 特产,服务,其它', '茶,糖,餐饮', '酒,糖,其它,茶', 
-                                         '其它,茶,糖,特产,酒', '茶,酒,其它,特产', '糖,特产,茶,酒,其它', '酒,茶,特产,其它,糖', '酒,茶,服务,餐饮', '茶,酒,服务,其它', '服务,其它,茶,酒', 
-                                         '酒,特产,彩票', '特产,其它,酒,糖', '服务,糖,酒,茶', '其它,酒,茶,服务', '服务,茶', '酒,特产,糖,其它', '特产,其它,酒,茶', '糖,特产,茶,其它', 
-                                         '酒,茶,特产,糖,餐饮,服务,其它', '服务,茶,糖,酒,特产,其它', '服务,糖,特产', '特产,餐饮,其它', '糖,茶,酒,餐饮', '特产,茶,服务,其它', 
-                                         '酒,特产,餐饮', '糖,特产,其它,酒', '服务,酒,茶,其它', '糖,其它,茶,酒', '茶,糖,特产,服务,其它', '餐饮,酒,服务,其它', '酒,茶,彩票,餐饮,服务', 
-                                         '糖,服务,酒', '酒,茶,其它,特产,糖', '酒,糖,特产,茶,其它', '其它,特产,茶,酒,糖', '酒,糖,其它,餐饮', '餐饮,服务,酒,茶,其它', 
-                                         '特产,茶,糖,酒,其它', '茶,特产,酒,糖,服务', '特产,服务,茶', '其它,糖,特产', '茶,特产,糖,其它', '其它,酒,餐饮', '酒,服务,糖,其它', 
-                                         '餐饮,糖,特产', '特产,酒,茶,餐饮', '其它,糖,特产,茶', '酒,茶,服务,特产,其它', '酒,特产,服务,糖', '茶,酒,餐 饮,其它', '酒,餐饮,糖,其它', 
-                                         '其它,服务,特产,糖,酒', '酒,茶,糖,特产,彩票,餐饮', '服务,其它,特产,糖,茶', '酒,茶,糖,其它, 服务,餐饮', '糖,特产,其它,服务', '糖,茶,特产,酒', 
-                                         '糖,餐饮', '服务,彩票', '茶,酒,餐饮,服务', '餐饮,茶', '茶,糖,酒,餐饮', '酒,茶,糖,特产,餐饮,其它', '茶,酒,特产,餐饮', '茶,餐饮,其它', 
-                                         '酒,服务,其它,茶', '其它,酒,特产', '特产,糖,服务,其它', '糖,酒,服务', '糖,服务,餐饮', '茶,特产,其它,酒', '特产,酒,糖,茶', '服务,特产,其它', 
-                                         '糖,茶,酒,特产,服务', '特产,其它,茶, 糖,酒', '茶,酒,糖,特产,服务,其它', '酒,茶,特产,服务,糖', '酒,服务,茶,特产', '餐饮,糖,茶,酒', 
-                                         '酒,糖,彩票,其它', '糖,茶, 酒,特产,其它,服务', '特产,茶,酒,糖,其它', '餐饮,特产,酒,茶', '服务,餐饮,酒,茶', '酒,茶,其它,糖,特产', 
-                                         '其它,糖,茶,服务', '茶,酒,糖,特产,服务', '糖,酒,彩票', '服务,特产,茶,酒', '特产,糖,服务', '酒,其它,茶,特产', '服务,茶,酒,糖,特产,其它', 
-                                         ' 酒,特产,糖,茶,餐饮,服务', '糖,酒,其它,服务', '其它,服务,酒,茶,糖', '茶,酒,彩票,特产', '酒,茶,糖,特产,彩票,服务', '服务, 酒,茶,特产', 
-                                         '服务,茶,糖,特产', '酒,茶,服务,其它,糖,特产', '酒,其它,糖,特产', '其它,糖,酒,茶,特产', '服务,其它,特产', ' 酒,茶,糖,彩票,餐饮', 
-                                         '茶,糖,彩票,餐饮', '酒,茶,糖,特产,服务,餐饮', '糖,茶,酒,服务,其它', '餐饮,其它,特产,酒', '酒,糖,特 产,餐饮,彩票', '服务,酒,糖,其它', 
-                                         '酒,茶,特产,服务,其它,糖', '特产,服务,酒,茶,糖', '服务,其它,餐饮', '酒,糖,茶,特产,服务,其它', '茶,特产,服务,餐饮', '茶,餐饮,服务,酒', 
-                                         '彩票,特产,糖,茶,酒,其它,服务', '糖,茶,其它,特产', '糖,餐饮,酒,茶', '特 产,酒,茶,其它', '糖,特产,服务,酒', '餐饮,茶,酒,其它', 
-                                         '其它,服务,酒,糖,特产', '其它,服务,酒', '酒,其它,餐饮,服务', '其它,糖,茶,特产', '茶,糖,特产,彩票', '酒,茶,彩票,特产', '糖,特产,餐饮', 
-                                         '酒,茶,特产,糖,服务,其它', '特产,糖,餐饮,其它', '餐 饮,其它,茶', '服务,糖', '酒,茶,糖,特产,餐饮,其它,服务', '茶,酒,特产,服务,其它', 
-                                         '茶,特产,餐饮', '酒,茶,糖,彩票,其它', ' 糖,彩票', '其它,糖,特产,酒,茶', '服务,特产,糖,酒', '酒,服务,其它,特产', '茶,糖,其它,服务', 
-                                         '餐饮,糖,酒,其它', '酒,茶,特 产,彩票,餐饮,服务', '糖,茶,酒,餐饮,服务,其它', '茶,酒,特产,其它,服务', '其它,服务,餐饮,特产', '酒,其它,特产,服务',
-                                         '酒, 彩票', '餐饮,酒,糖,其它', '茶,服务,其它,酒', '酒,茶,餐饮,特产', '其它,糖,茶,酒,服务', '彩票,服务,特产,酒', '茶,糖,特产, 服务,餐饮', 
-                                         '服务,糖,茶,酒,特产', '其它,服务,特产,糖,茶,酒', '茶,特产,其它,糖', '茶,其它,糖,特产', '茶,酒,糖,餐饮,服务, 其它', '服务,特产,糖,其它', 
-                                         '糖,特产,彩票,茶', '酒,茶,服务,其它,餐饮', '餐饮,茶,特产', '酒,茶,特产,餐饮,服务,其它', '餐 饮,彩票', '餐饮,特产,其它', '特产,彩票,糖,茶,酒', 
-                                         '茶,糖,餐饮,服务', '糖,酒,其它,特产', '茶,服务,酒,糖', '其它,彩票,酒', '酒,糖,茶,其它,服务', '服务,特产,酒,茶,糖', '餐饮,特产,糖,其它,酒', 
-                                         '特产,其它,糖,酒,茶', '糖,茶,酒,彩票', '酒,糖,茶,特产,服务', '服务,茶,特产', '糖,餐饮,其它', '酒,糖,餐饮,服务,其它', '酒,茶,餐饮,服务,特产', 
-                                         '酒,糖,茶,餐饮,其它', '其它,特产,茶,糖', '其它,特产,茶,糖,酒', '茶,餐饮,特产,糖', '酒,糖,彩票', '糖,特产,彩票', '服务,特产,糖,茶,酒,其它', 
-                                         '其它,服务,特产,糖', '糖,茶,酒,餐饮,服务', '特产,茶,糖,服务', '糖,茶,餐饮,其它', '其它,糖,服务', '其它,服务,糖,特产', '茶,糖,特产, 餐饮,酒', 
-                                         '特产,服务,糖,茶,酒', '糖,特产,其它,酒,茶', '茶,餐饮,服务,其它', '服务,餐饮,特产,糖,茶,酒', '茶,糖,特产,服务, 酒', '酒,糖,特产,其它,茶', 
-                                         '茶,酒,糖,其它,特产', '服务,其它,糖', '酒,茶,糖,服务,餐饮', '酒,糖,餐饮,服务', '酒,特产,茶,糖,其它', '茶,其它,服务', '酒,茶,特产,彩票,餐饮', 
-                                         '服务,糖,茶,酒', '酒,服务,餐饮,其它', '服务,酒,其它,特产', '彩票,糖,茶, 酒', '其它,茶,酒,糖,服务', '餐饮,糖', '其它,特产,茶', '酒,服务,特产', 
-                                         '酒,服务,茶,糖,特产,其它', '糖,茶,服务', '酒,糖,茶,服务,其它', '餐饮,特产,酒', '特产,糖,服务,餐饮', '特产,酒,其它,茶,糖', '特产,茶,服务', 
-                                         '糖,茶,特产,服务', '茶,特产,彩票', '其它,服务,糖,特产,茶,酒', '彩票,茶,糖', '糖,酒,茶,特产,其它', '其它,酒,糖,特产', '服务,其它,酒,茶,糖,特产',
-                                         '酒,糖, 服务,特产,其它', '特产,茶,餐饮,服务,其它', '茶,餐饮,特产', '酒,茶,餐饮,其它,服务', '酒,服务,其它,彩票', '特产,酒,茶,糖, 服务', 
-                                         '特产,茶,彩票,其它', '酒,茶,特产,彩票,服务', '服务,其它,酒,茶', '糖,茶,其它,酒', '酒,茶,服务,其它,特产', '酒,特产,茶,糖,服务', 
-                                         '彩票,其它,茶,酒', '特产,其它,服务', '酒,特产,其它,服务', '糖,茶,酒,其它,服务', '彩票,服务,酒,其它', '服务,糖,茶,酒,特产,其它', 
-                                         '其它,服务,特产', '酒,茶,特产,彩票,其它', '服务,其它,茶,酒,糖', '彩票,酒', '彩票,服务', '茶,特产, 餐饮,其它', '餐饮,茶,糖,酒', '服务,茶,其它',
-                                         '服务,酒,茶,糖,其它,特产', '特产,其它,糖,茶', '服务,茶,糖,酒', '酒,茶,餐饮,服务,其它,特产', '酒,其它,糖,茶,特产', '茶,服务,糖,特产', 
-                                         '茶,酒,糖,彩票,特产,其它', '彩票,服务,其它', '特产,茶,糖,酒', '糖,其它,餐饮', '糖,餐饮,服务', '酒,茶,糖,服务,其它,特产', 
-                                         '茶,糖,餐饮,服务,其它', '酒,糖,其它,茶,特产', '糖,茶,特产,服 务,彩票', '特产,糖,其它,酒,茶', '茶,糖,特产,餐饮,其它,服务', 
-                                         '其它,特产,酒,茶,糖', '糖,特产,酒,服务,其它', '服务,茶,酒, 糖,特产', '餐饮,茶,糖', '特产,糖,酒,茶,其它', '酒,糖,特产,餐饮', 
-                                         '酒,茶,糖,餐饮,特产', '酒,餐饮,茶,糖', '服务,餐饮,糖', '糖,特产,服务,餐饮,其它', '其它,彩票,特产,服务', '糖,茶,特产,其它,酒', 
-                                         '其它,酒,特产,糖,茶', '酒,茶,糖,彩票,特产', '糖, 茶,酒,特产,彩票,其它,服务', '茶,其它,服务,酒', '服务,餐饮,酒,茶,其它', '其它,特产,酒,糖', 
-                                         '茶,酒,糖,特产,服务,餐饮,其它', '餐饮,服务,特产', '酒,糖,茶,特产,彩票', '酒,服务,茶,其它', '酒,其它,糖,服务', '酒,其它,特产,茶', 
-                                         '特产,糖,茶,餐饮', ' 酒,其它,茶,糖,特产', '酒,茶,糖,特产,彩票,服务,其它', '酒,糖,特产,餐饮,服务', '糖,特产,酒,服务', '酒,糖,特产,彩票,其它', 
-                                         '其它,特产,服务,茶', '酒,茶,糖,特产,服务,其它,餐饮', '餐饮,服务,酒', '酒,茶,特产,其它,餐饮', '茶,糖,彩票,其它', '彩票,酒,糖', 
-                                         '糖,彩票,服务,其它,酒', '服务,其它,酒,茶,糖', '茶,彩票,特产', '特产,服务,餐饮', '酒,茶,糖,餐饮,其它', '特产,服务, 酒,糖', '酒,特产,其它,茶', 
-                                         '餐饮,酒,茶,其它', '特产,糖,服务,酒,茶', '酒,餐饮,特产', '特产,酒,糖,服务', '特产,服务,其它, 茶,酒,糖', '特产,茶,酒,餐饮,服务', 
-                                         '其它,酒,茶,糖,服务', '茶,酒,糖,特产,餐饮,服务', '茶,糖,酒,特产,服务', '服务,茶,糖,其它', '餐饮,其它,酒', '酒,糖,服务,特产', 
-                                         '特产,服务,其它,酒', '餐饮,酒,茶,服务', '其它,餐饮,酒', '酒,糖,茶,特产,其它,服务', '特产,服务,茶,酒,糖', '其它,茶,特产,糖,酒', 
-                                         '其它,服务,特产,糖,茶', '酒,糖,服务,餐饮', '茶,糖,服务,餐饮', '特产,服务,酒', '茶,服务,酒', '餐饮,服务,其它,糖,茶', 
-                                         '酒,茶,糖,特产,餐饮,服务,其它,彩票', '茶,酒,糖,餐饮,其它', '酒,糖,特产,彩票, 餐饮,服务,其它', '糖,彩票,酒', '服务,特产,糖,茶', 
-                                         '服务,餐饮,特产', '酒,茶,糖,其它,餐饮', '其它,茶,特产,彩票', '酒,糖,茶,特产,餐饮', '酒,茶,糖,特产,服务,彩票', '其它,酒,特产,服务', 
-                                         '彩票,酒,特产', '特产,酒,茶,其它,糖', '茶,酒,糖,餐饮', '茶,彩票,特产,糖', '服务,其它,茶,糖,特产,酒', '酒,茶,糖,服务,其它,彩票', '彩票,酒,其它',
-                                         '其它,餐饮,服务,糖', '服务,其它,特 产,糖,茶,酒', '特产,彩票,餐饮,服务,其它,茶,糖', '茶,糖,餐饮,酒', '酒,服务,特产,茶', '彩票,餐饮', 
-                                         '其它,酒,糖,服务', '餐 饮,服务,酒,茶', '其它,茶,酒,特产', '特产,其它,酒,糖,茶', '特产,糖,茶,酒,服务,其它', '酒,特产,茶,其它,服务', 
-                                         '酒,茶,服务,其它,糖', '餐饮,酒,特产', '茶,糖,其它,特产,酒', '酒,特产,彩票,餐饮', '彩票,糖,茶', '酒,服务,餐饮,糖,其它', '彩票,餐饮,酒,茶', 
-                                         '糖,茶,彩票', '特产,餐饮,服务,其它,茶,酒', '其它,服务,特产,茶,酒', '酒,餐饮,服务,其它,糖,茶', '茶,餐饮,其它,服务', '特产,糖,其它,酒', 
-                                         '服务,糖,酒,其它', '糖,特产,其它,茶,酒', '餐饮,特产,茶', '茶,糖,其它,特产', '餐饮,服务,其它,酒', '其它,茶,酒,服务', '糖,特产,酒,餐饮', 
-                                         '糖,特产,茶,酒,服务', '茶,彩票,餐饮,服务,其它', '服务,其它,糖,特产', '茶,酒,糖,特产, 餐饮', '酒,茶,餐饮,服务,糖', '茶,其它,糖,酒', 
-                                         '酒,茶,彩票,服务', '餐饮,酒,茶,糖,其它', '糖,酒,特产,茶', '餐饮,其它,茶,酒,糖', '特产,糖,酒,餐饮,彩票,服务', '糖,酒,茶,服务,其它', 
-                                         '服务,糖,特产,其它,酒', '糖,特产,茶,餐饮', '茶,酒,糖,彩票', '餐饮,酒,茶,特产', '餐饮,服务,酒,特产', '服务,其它,特产,糖', '茶,服务,特产,其它', 
-                                         '其它,酒,特产,茶,糖', '其它,服务,餐饮,酒', '酒,茶,服务,特产,糖', '酒,糖,茶,其它,特产', '酒,餐饮,茶,特产', '服务,其它,糖,酒,茶', 
-                                         '茶,其它,酒,特产', '酒,糖,特产,彩票', '糖,其它,酒,茶,服务', '其它,糖,茶,酒,餐饮', '特产,其它,服务,酒', '餐饮,特产,糖', '其它,糖,服务,酒', 
-                                         '酒,服务,糖', '酒,茶,特产,服务,糖,其它', '服务,茶,酒,糖', '茶,糖,特产,餐饮', '其它,餐饮,服务,特产,茶,酒', '酒,特产,服务,餐饮', '其它,酒,糖,茶',
-                                         '酒,茶,其它,服务,糖', '酒,彩票,茶,服务,其它', '餐饮,服务,特产,其它', '糖,酒,特产,服务', '其它,酒,茶,糖,特产,餐 饮', '茶,酒,特产,糖,服务', 
-                                         '酒,茶,其它,餐饮,服务', '其它,茶,糖,酒,特产', '特产,餐饮,酒,茶,服务,其它', '特产,彩票,餐饮,服务,其它', '特产,糖,酒,服务', 
-                                         '服务,茶,酒,特产,其它', '酒,服务,特产,其它', '其它,服务,酒,茶,特产', '茶,其它,酒,糖', '糖, 服务,特产', '服务,其它,茶', '糖,服务,其它,茶,酒', 
-                                         '其它,特产,服务,糖,茶', '糖,服务,茶', '糖,特产,彩票,餐饮', '酒,茶,服务,糖', '服务,茶,酒,特产,糖,其它', '茶,糖,酒,其它,特产', '彩票,服务,酒', 
-                                         '茶,糖,特产,彩票,餐饮,服务,其它', '其它,特产,糖, 服务', '茶,酒,糖,特产,其它,服务', '特产,茶,餐饮,服务', '酒,糖,特产,服务,餐饮', '特产,糖,彩票',
-                                         '餐饮,其它,酒,茶', '酒,特产,服务,茶,其它', '酒,茶,糖,餐饮,其它,服务', '酒,其它,彩票', '茶,餐饮,酒,糖', '酒,茶,糖,服务,餐饮,其它', 
-                                         '彩票,酒,服务', '茶,特产,糖,服务', '其它,特产,糖,服务,酒', '餐饮,特产,茶,酒', '茶,酒,特产,糖,餐饮', '其它,彩票,特产', '彩票,特产,茶', 
-                                         '茶,糖,服务,其它', '酒,茶,特产,服务,餐饮', '服务,餐饮,特产,糖,茶', '其它,服务,酒,糖', '其它,糖,茶,特产,酒', '酒,茶,糖,特 产,其它,彩票', 
-                                         '糖,彩票,其它', '服务,酒,糖,特产', '酒,茶,其它,彩票', '其它,服务,餐饮,特产,茶,酒', '酒,茶,餐饮,糖', '糖, 特产,餐饮,服务', 
-                                         '糖,茶,酒,特产,服务,其它', '其它,服务,特产,酒,茶', '酒,茶,餐饮,特产,服务', '酒,特产,其它,糖', '服务,酒,特产,其它', '特产,服务,餐饮,糖,茶,酒', 
-                                         '酒,特产,服务,其它,糖', '服务,特产,酒,茶', '茶,糖,特产,酒,服务', '服务,餐饮,酒,茶,糖,其它', '茶,酒,糖,餐饮,服务', '糖,特产,酒,茶,餐饮', 
-                                         '彩票,酒,糖,特产,其它', '酒,茶,服务,糖,特产', '茶,酒,服务,特产', '糖,彩票,茶', '特产,酒,其它,服务', '酒,其它,餐饮', '茶,酒,特产,其它,糖', 
-                                         '服务,酒,糖,茶', '特产,糖,茶,酒,彩票,餐饮,其它', '特产,茶,其它,糖', '酒,彩票,服务,其它', '特产,茶,酒,糖,彩票', '餐饮,服务,酒,茶,特产', 
-                                         '其它,糖,特产,酒', '餐饮,特产,酒,其它,茶', '特产,糖,茶,酒,餐饮,其它', '其它,服务,茶,酒', '茶,糖,特产,餐饮,服务,其它', '特产,餐饮,酒', 
-                                         '特产,彩票,餐饮,服务,其它,糖', '特产,服务,其它,酒,茶', '糖,茶,特产,酒,其它', '酒,糖,茶,特产,餐饮,服务,其它', '其它,糖,茶,特产,服务', 
-                                         '特产,酒,餐饮', '茶,服务,糖,酒', '特产,彩票,服务', '酒,服务,彩票', '糖,彩票,特产,茶,酒', '特产,其它,糖,酒', '酒,茶,彩票,服务,其它', 
-                                         '酒,茶,特产,其它,服务,餐饮', '茶,糖,服务,特产', '糖,茶,酒,服务,餐饮', '酒,特产,其它,茶,糖', '酒,特产,糖,茶,其它, 餐饮', '餐饮,特产,糖,茶,酒', 
-                                         '酒,茶,特产,彩票,糖', '酒,其它,服务,餐饮', '服务,餐饮,茶,酒', '酒,糖,茶,特产,餐饮,其它', ' 酒,糖,茶,服务,餐饮,其它', '酒,服务,茶,糖', 
-                                         '酒,餐饮,其它,服务', '服务,其它,糖,茶,酒', '酒,其它,特产,糖', '茶,特产,餐饮, 酒', '彩票,茶,酒,其它', '特产,酒,茶,服务,其它', 
-                                         '糖,服务,餐饮,其它', '糖,特产,酒,茶,其它', '酒,餐饮,糖,茶', '服务,其它, 特产,酒,茶,糖', '酒,茶,糖,餐饮,服务,其它,特产', '服务,特产,茶', 
-                                         '特产,糖,茶,酒,彩票,餐饮,服务', '酒,彩票,餐饮', '糖,茶, 酒,餐饮,其它', '酒,糖,特产,餐饮,其它', '酒,餐饮,糖,特产', '餐饮,茶,糖,特产', 
-                                         '彩票,酒,茶,糖,特产', '餐饮,茶,酒,糖,特产', '茶,糖,特产,其它,服务', '酒,糖,茶,餐饮', '其它,特产,酒,糖,茶', '茶,糖,其它,餐饮', 
-                                         '彩票,酒,茶,其它', '彩票,其它,特产', '茶,特产,酒,糖,其它'],
-        "has_taste_name":               ["是", "否"],
-        "show_area_section":            ["8㎡以上", "7.5-8(含)㎡", "7-7.5(含)㎡", "6.5-7(含)㎡", "6-6.5(含)㎡", "5.5-6(含)㎡", "5-5.5(含)㎡", 
-                                         "4.5-5(含)㎡", "4-4.5(含)㎡", "3.5-4(含)㎡", "3-3.5(含)㎡", "2.5-3(含)㎡", "2-2.5(含)㎡", "1.5-2(含)㎡",
-                                         "1-1.5(含)㎡", "0.5-1(含)㎡", "0.5(含)㎡以下", "0"],
-        "sign_status_name":             ["有", "计划中", "无"],
-        "shopsunny_vi_name":            ["直营终端", "合作终端", "加盟终端", "一般现代终端", "普通终端", "无"],
-        "header_name":                  ["连锁形象标识", "单店形象标识", "无标识"],
-        "counter_status_name":          ["有", "计划中", "无"],
-        "counter_number":               ["15", "9", "8", "7", "6", "5", "4", "3", "2", "1", "0"],
-        "counter_put_type_name":        ["独立陈列", "混杂陈列", "无陈列"],
-        "back_counter_status_name":     ["有", "计划中", "无"],
-        "back_counter_put_type_name":   ["独立陈列", "混杂陈列", "无陈列"],
-        "back_counter_style_name":      ["条烟展示板面", "条包混合展示板面", "无条烟展示板面"],
-        "back_counter_number":          ["25", "20", "18", "16", "15", "14", "13", "12", "11", "10", "9", "8", "7", "6", "5", "4", "3", "2", "1", "0"],
-        "back_counter_has_show_name":   ["有", "无"],
-        "legal_person_gender":          ["男", "女"],
-        "legal_education_name":         ["大学以上", "大学", "大专", "中专", "高中", "初中", "小学"],
-        "legal_is_cpc_member":          ["是", "否"],
-        "operator_person_gender":       ["男", "女"],
-        "operator_education_name":      ["大学以上", "大学", "大专", "中专", "高中", "初中", "小学"],
-        "operator_is_cpc_member":       ["是", "否"],
-        "market_type_name":             ["城网", "农网"],
-        "busi_place_codename":          ["烟草专业店", "商场", "超市", "便利店", "娱乐服务类", "其他"],
-        "sub_busi_codename":            ["烟草专卖店", "烟草专柜", "烟酒商店", "其他烟草专业店", "现代连锁便利店", 
-                                         "现代单体便利店", "超市", "传统便利店", "商场", "宾馆(酒店)", "餐馆", "休闲娱乐店", "其他", "未细分"],
-        "sub_market_type_name":         ["主城区", "镇中心区", "城乡结合区", "镇乡结合区", "乡中心区", "村庄", "特殊区域", "未分类"],
-        "creditclass_name":             ["AAA", "AA", "A", "C", "D"]
-    }
-
-    CLEANING_RULES = {
-        "busi_place_area_section":      {"method": "fillna", "opt": "fill", "value": "0", "type": "str"},
-        "rent_section":                 {"method": "fillna", "opt": "fill", "value": "0", "type": "str"},
-        "rent_price_section":           {"method": "fillna", "opt": "fill", "value": "0", "type": "str"},
-        "busi_open_section":            {"method": "fillna", "opt": "fill", "value": "未知区间", "type": "str"},
-        "busi_close_section":           {"method": "fillna", "opt": "fill", "value": "未知区间", "type": "str"},
-        "is_chain_storename":           {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "criterion_codename":           {"method": "fillna", "opt": "fill", "value": "1-3年无违法违规", "type": "str"},
-        "market_info_codename":         {"method": "fillna", "opt": "fill", "value": "未采集", "type": "str"},
-        "tag_codename":                 {"method": "fillna", "opt": "fill", "value": "一般", "type": "str"},
-        "cooperate_codename":           {"method": "fillna", "opt": "fill", "value": "一般", "type": "str"},
-        "store_appearance_name":        {"method": "fillna", "opt": "fill", "value": "一般", "type": "str"},
-        "position_codename":            {"method": "fillna", "opt": "fill", "value": "其他", "type": "str"},
-        "sub_position_codename":        {"method": "fillna", "opt": "fill", "value": "其他", "type": "str"},
-        "zone_appraise_name":           {"method": "fillna", "opt": "fill", "value": "五类", "type": "str"},
-        "choose_road_name":             {"method": "fillna", "opt": "fill", "value": "一般", "type": "str"},
-        "choose_address_name":          {"method": "fillna", "opt": "fill", "value": "其它", "type": "str"},
-        "area_position_type_name":      {"method": "fillna", "opt": "fill", "value": "城区(市、区县、中心辖区)", "type": "str"},
-        "area_func_type_name":          {"method": "fillna", "opt": "fill", "value": "集贸地", "type": "str"},
-        "community_func_type_name":     {"method": "fillna", "opt": "fill", "value": "一般居住楼宇(成熟)", "type": "str"},
-        "rate_pay_type_name":           {"method": "fillna", "opt": "fill", "value": "一般纳税人", "type": "str"},
-        "order_cycle_type_name":        {"method": "fillna", "opt": "fill", "value": "一月一访", "type": "str"},
-        "is_modern_terminalname":       {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "modern_terminal_name":         {"method": "fillna", "opt": "fill", "value": "无法识别", "type": "str"},
-        "cooperate_type_name":          {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "terminal_star_name":           {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "star_terminal_name":           {"method": "fillna", "opt": "fill", "value": "未分类", "type": "str"},
-        "appearance_span_section":      {"method": "fillna", "opt": "fill", "value": "0", "type": "str"},
-        "upholster_name":               {"method": "fillna", "opt": "fill", "value": "非标", "type": "str"},
-        "shop_feature_name":            {"method": "fillna", "opt": "fill", "value": "其它", "type": "str"},
-        "shop_char_type_name":          {"method": "fillna", "opt": "fill", "value": "其它", "type": "str"},
-        "has_taste_name":               {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "show_area_section":            {"method": "fillna", "opt": "fill", "value": "0", "type": "str"},
-        "sign_status_name":             {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "shopsunny_vi_name":            {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "header_name":                  {"method": "fillna", "opt": "fill", "value": "无标识", "type": "str"},
-        "counter_status_name":          {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "counter_number":               {"method": "fillna", "opt": "fill", "value": "0", "type": "str"},
-        "counter_put_type_name":        {"method": "fillna", "opt": "fill", "value": "无陈列", "type": "str"},
-        "back_counter_status_name":     {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "back_counter_put_type_name":   {"method": "fillna", "opt": "fill", "value": "无陈列", "type": "str"},
-        "back_counter_style_name":      {"method": "fillna", "opt": "fill", "value": "无条烟展示板面", "type": "str"},
-        "back_counter_number":          {"method": "fillna", "opt": "fill", "value": "0", "type": "str"},
-        "back_counter_has_show_name":   {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "legal_person_gender":          {"method": "fillna", "opt": "fill", "value": "男", "type": "str"},
-        "legal_education_name":         {"method": "fillna", "opt": "fill", "value": "初中", "type": "str"},
-        "legal_is_cpc_member":          {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "operator_person_gender":       {"method": "fillna", "opt": "fill", "value": "男", "type": "str"},
-        "operator_education_name":      {"method": "fillna", "opt": "fill", "value": "初中", "type": "str"},
-        "operator_is_cpc_member":       {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "market_type_name":             {"method": "fillna", "opt": "fill", "value": "农网", "type": "str"},
-        "busi_place_codename":          {"method": "fillna", "opt": "fill", "value": "其他", "type": "str"},
-        "sub_busi_codename":            {"method": "fillna", "opt": "fill", "value": "其他", "type": "str"},
-        "sub_market_type_name":         {"method": "fillna", "opt": "fill", "value": "未分类", "type": "str"},
-        "creditclass_name":             {"method": "fillna", "opt": "fill", "value": "C", "type": "str"},
-    }
-
-class ProductConfig:
-    FEATURES_COLUMNS = [
-        "product_code",                  # 商品编码
-        "factory_name",                  # 产地(工业公司名称)
-        "brand_name",                    # 品牌名称
-        "is_low_tar",                    # 低焦油卷烟
-        "is_medium",                     # 中支烟
-        "is_tiny",                       # 细支烟
-        "is_coarse",                     # 粗支烟(同时非中非细)
-        "is_exploding_beads",            # 爆珠烟
-        "is_abnormity",                  # 异形包装
-        "is_cig",                        # 雪茄烟
-        "is_chuangxin",                  # 创新品类
-        "direct_retail_price",           # 卷烟建议零售价
-        "tbc_total_length",              # 烟支总长度
-        "product_style",                 # 包装类型
-        # "flavor_type_std",                              # 香型_规范
-        # "main_color_std",                               # 主色调_规范
-        # "carton_packaging_std",                         # 条装包装_规范
-        # "packaging_type_std",                           # 包装类型_规范
-        # "opening_method_std",                           # 打开方式_规范
-        # "cigarette_paper_std",                          # 卷烟纸_规范
-        # "cigarette_holder_length_std",                  # 烟嘴长度_规范
-        # "flavor_feature_std",                           # 口味特征_规范
-        # "new_product_connotation_std",                  # 新品希望传递的品牌内涵_规范
-        # "core_competitive_advantage_std",               # 同类核心竞争优势_规范
-        # "target_consumers_std",                         # 目标消费者_规范
-        # "consumption_scenario_std",                     # 消费场景_规范
-        # "core_selling_points_std",                      # 核心卖点_规范
-        # "product_features_std",                         # 产品特征_规范
-        # "regional_market_preference_match_std",         # 区域市场偏好匹配度_规范
-        # "cigarette_holder_std",                         # 烟嘴_规范
-        # "target_competitors_std"                        # 目标竞品_规范
-    ]
-
-    FEATURE_ENUM_MAP = {
-        "factory_name":                    ["安徽中烟", "澳门云福卷烟厂", "北欧烟草集团", "博格集团", "重庆中烟", "川渝中烟", "菲利普莫里斯亚洲", 
-                                            "福建中烟", "甘肃工业", "广东中烟", "广西中烟", "贵州中烟", "海南红塔", "河北中烟", "河南中烟", 
-                                            "黑龙江工业", "红塔辽宁烟草", "湖北中烟", "湖南中烟", "吉林工业", "家源开发股份有限公司", 
-                                            "嘉莱赫国际有限公司", "江苏中烟", "江西中烟", "凯德控股有限公司", "力量雪茄烟草有限公司", 
-                                            "南洋兄弟烟草股份", "内蒙古昆明卷烟", "日本烟草(香港)有限公司", "三宝麟国际集团", "厦门调拨站", 
-                                            "山东中烟", "山西昆明烟草", "陕西中烟", "上海烟草(集团)公司", "上海烟草公司", "深圳工业", "四川中烟", 
-                                            "特富意烟草(国际)", "雪茄客烟草国际贸易有限公司", "耀莱雪茄控股有限公司", "引领国际有限公司", 
-                                            "英飞烽香港有限公司", "英美烟草中国有限公司", "云南中烟", "浙江中烟", "中茄国际贸易有限公司", 
-                                            "中烟英美烟草国际有限公司", "株式会社 KT&G", "无"],
-        "brand_name":                      ["万宝路", "555", "骆驼(国外)", "大华", "娇子", "大青山", "龙凤呈祥", "黄鹤楼", "真龙", "七匹狼", 
-                                            "芙蓉王", "双喜(广)", "贵烟", "钓鱼台", "红双喜(南洋)", "云烟", "蒙特", "富恩特", "拉·加莱拉", "苏烟", 
-                                            "丹纳曼", "黄山", "南京", "利群", "金桥", "泰山", "好日子", "石林", "美登", "红河", "嘉辉", "七星", 
-                                            "都彭", "天下秀", "长城", "高希霸", "钻石", "金圣", "王冠雪茄", "黄金叶", "中南海", "长白山", "红旗渠", 
-                                            "建牌", "大卫杜夫", "罗密欧", "茂大", "红金龙", "天子", "熊猫", "双喜(深)", "大前门", "兰州", 
-                                            "红双喜(沪)", "雄狮", "广州", "红玫王", "黄果树", "红塔山", "福", "小熊猫", "爱喜", "蒙特利", "玉溪", 
-                                            "都宝", "麦克纽杜", "卡里罗", "中华", "牡丹(沪)", "阿里山", "顺百利", "白沙", "羊城", "白云", 
-                                            "特美思", "国宾", "帕特加", "比德奥", "冬虫夏草", "威龙(湛江)", "香格里拉", "红梅", "延安", 
-                                            "特富意", "石狮", "金香港", "好猫", "登喜路", "乐迪", "林海灵芝", "椰树", "北京", "大红鹰", "大丰收", 
-                                            "红双喜(武汉)", "五叶神", "狮", "优民", "将军", "遵义", "恒大", "飞马", "红三环", "芙蓉", "工字", 
-                                            "古田", "狮牌", "君力", "哈尔滨", "梦都", "香梅(阜阳)", "哈德门", "梅州", "红山茶", "猴王", "沙龙", 
-                                            "潘趣", "狮子牌", "上海", "红玫", "醒宝", "广州湾", "百乐门", "关塔那摩", "威斯", "五一", "寿百年", 
-                                            "人民大会堂", "土楼", "三沙", "西湖", "光明", "阿诗玛", "宝亨", "恭贺新禧", "长寿", "茶花", "迎客松", 
-                                            "龙烟", "金澳门", "宝岛", "多米尼加之花", "国喜", "金驼", "君特欧", "上游", "幸福", "春城", "吉庆", 
-                                            "黄山松", "黄金龙", "紫气东来", "彼亚赛", "银辉", "潮牌", "庐山", "三峡", "壹支笔", "双叶", "无"],
-        "is_low_tar":                      ["是", "否"],
-        "is_medium":                       ["是", "否"],
-        "is_tiny":                         ["是", "否"],
-        "is_coarse":                       ["是", "否"],
-        "is_exploding_beads":              ["是", "否"],
-        "is_abnormity":                    ["是", "否"],
-        "is_cig":                          ["是", "否"],
-        "is_chuangxin":                    ["是", "否"],
-        "direct_retail_price":             ["0-5", "5-10", "10-15", "15-20", "20-26", "26-30", "30-40",
-                                            "40-50", "50-65", "65-80", "80-100", "100以上", "5-9.9", "10-19.9",
-                                            "20-29.9", "30-39.9", "40-49.9", "50-59.9", "60-69.9", "70-79.9", "80-89.9",
-                                            "90-99.9", "100-109.9", "110-119.9", "120-129.9", "130-139.9", "140-149.9",
-                                            "150-199.9", "200-249.9", "250-499.9", "500以上"],
-        "tbc_total_length":                ["小于79", "80-88", "89-100", "大于120"],
-        "product_style":                   ["条盒硬盒", "条包硬盒", "条盒软盒", "条包软盒", "铁盒", "其他"],
-
-
-        "flavor_type_std": [
-            "醇香", "清甜香", "清香", "果香", "焦甜香", "烤烟", "原香", "荷香", 
-            "本香", "草本香", "甜香", "混合", "薄荷", "陈皮香", "奶甜香", 
-            "浓香", "松香", "药香", "高香", "咖香", "茶香", "外香", "酒香", "无"
-        ],
-        "main_color_std": [
-            "红色", "黄色", "白色", "蓝色", "金色", "黑色", "紫色", "绿色", "灰色", 
-            "青色", "金黄色", "明黄色", "深蓝色", "淡黄色", "米黄色", "咖啡色", 
-            "橙色", "褐色", "浅绿色", "青绿色", "香槟金色", "咖色", "墨绿色", 
-            "银色", "咖红色", "红金色", "蓝金色", "湖蓝色", "金红色", "米白色", 
-            "浅咖色", "蓝白色", "黑白灰色", "浅蓝色", "深棕色", "粉绿色", "米色", 
-            "蓝黑色", "深绿色", "矿青色", "铜青色", "孔雀绿色", "褐红色", "玫瑰红色", 
-            "玫瑰金色", "银灰色", "藏蓝色", "星空蓝色", "深咖啡色", "灰白色", 
-            "青黛色", "正红色", "银绿色", "绛紫色", "海边玻璃蓝色", "乳白色", 
-            "紫蓝色", "橙蓝色", "深红色", "马尔斯绿色", "无"
-        ],
-        "carton_packaging_std": [
-            "常规", "木盒", "硬盒", "标细", "中支", "全开式", "纵开式", "细支", "常规(异形)", "无"
-        ],
-        "packaging_type_std": [
-            "硬包", "软包", "硬盒", "双中支", "软包硬化", "无"
-        ],
-        "opening_method_std": [
-            "常规", "侧开", "全开式", "提拔式", "无"
-        ],
-        "cigarette_paper_std": [
-            "常规", "白色", "功能型", "横罗纹", "竖纹", "全麻", "横纹", "特殊工艺", 
-            "颜色", "黑色", "高克重", "半麻", "螺纹", "棕色", "横螺纹", "味道", 
-            "含麻", "烟草本香卷烟纸", "五星中空滤嘴", "黄色", "无"
-        ],
-        "cigarette_holder_length_std": [
-            "20(不含)-25", "25(不含)-30", "30(不含)-100", "无"
-        ],
-        "flavor_feature_std": [
-            "醇厚", "细腻", "烟草本香", "舒适", "清香", "纯净", "柔和", "甜润", 
-            "清甜", "浓郁", "绵长", "顺滑", "低刺激", "回甘", "满足感强", "轻松", 
-            "饱满", "果香", "焦甜", "干净", "劲头适中", "劲头大", "清新", "花香", 
-            "甘润", "自然", "醇和", "无"
-        ],
-        "new_product_connotation_std": [
-            "品味", "经典", "时尚", "成功", "探索", "文化", "品质", "传承", 
-            "自然", "创新", "尊贵", "健康", "喜庆", "活力", "年轻", "科技", "匠心", "无"
-        ],
-        "core_competitive_advantage_std": [
-            "口感好", "性价比高", "技术创新", "品牌文化", "舒适度高", "香气独特", 
-            "经典传承", "工艺先进", "品质优", "原料优质", "低焦低害", "包装设计", 
-            "满足感强", "无"
-        ],
-        "target_consumers_std": [
-            "普通消费者", "年轻群体", "高端消费者", "中年群体", "商务人士", "追求品质", 
-            "中端消费者", "男女皆宜", "白领", "男性为主", "追求时尚", "追求性价比", 
-            "企业家", "中老年群体", "公务员", "无"
-        ],
-        "consumption_scenario_std": [
-            "日常自吸", "商务接待", "休闲娱乐", "礼品消费", "宴会用烟", "夜场消费", 
-            "婚庆用烟", "节日送礼", "无"
-        ],
-        "core_selling_points_std": [
-            "包装设计", "独特风味", "工艺创新", "原料精选", "品牌文化", "口感舒适", 
-            "身份象征", "满足感强", "性价比高", "低焦减害", "无"
-        ],
-        "product_features_std": [
-            "追求品质", "性价比", "新奇体验", "经典传承", "低焦健康", "时尚潮流", 
-            "高端奢华", "商务风格", "无"
-        ],
-        "regional_market_preference_match_std": [
-            "高GDP地区", "娱乐发达城市", "一线城市", "旅游城市", "二线城市", 
-            "三四线城市", "经济发达城市", "新兴产业城市", "传统工业城市", "无"
-        ],
-        "cigarette_holder_std": [
-            "常规", "爆珠", "复合滤棒", "中空", "视觉设计", "加香", "镂空", "甜味", 
-            "颗粒", "印花", "活性炭", "无"
-        ],
-        "target_competitors_std": [
-            "荷花、黄鹤楼、芙蓉王、南京", "芙蓉王(硬中支)", "黄鹤楼、南京、双喜", 
-            "中华", "钻石(荷花)", "利群(新版)", "中华(双中支)", "芙蓉王(硬)", 
-            "健牌、七星", "高价卷烟", "南京(炫赫门)", "贵烟(跨越)", "中华(软)、中华(双中支)", 
-            "黄鹤楼(视窗)", "中华(金细支)", "芙蓉王(硬细支)", "玉溪(软)", "黄金叶(商鼎)", 
-            "煊赫门", "荷花", "南京(雨花石)", "天子(中支)", "云烟(细支云龙)", 
-            "黄金叶(商鼎)、七匹狼(纯境)", "双喜(硬经典1906)", "七匹狼(纯境)", "云烟(紫)", 
-            "利群(西子阳光)", "中华(金中支)", "七匹狼(软灰)", "荷花细支", "紫云", 
-            "黄鹤楼、芙蓉王、南京", "和天下", "蓝利群", "硬中华", "软中华", 
-            "硬冰爵、硬8°、大观园冰爆", "万宝路、爱喜、箭牌、555", "无"
-        ]
-    }
-    CLEANING_RULES = {
-        "factory_name":                             {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "brand_name":                               {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "is_low_tar":                               {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "is_medium":                                {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "is_tiny":                                  {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "is_coarse":                                {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "is_exploding_beads":                       {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "is_abnormity":                             {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "is_cig":                                   {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "is_chuangxin":                             {"method": "fillna", "opt": "fill", "value": "否", "type": "str"},
-        "direct_retail_price":                      {"method": "fillna", "opt": "fill", "value": "0-5", "type": "str"},
-        "tbc_total_length":                         {"method": "fillna", "opt": "fill", "value": "小于79", "type": "str"},
-        "product_style":                            {"method": "fillna", "opt": "fill", "value": "其他", "type": "str"},
-
-        "flavor_type_std":                          {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "main_color_std":                           {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "carton_packaging_std":                     {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "packaging_type_std":                       {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "opening_method_std":                       {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "cigarette_paper_std":                      {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "cigarette_holder_length_std":              {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "flavor_feature_std":                       {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "new_product_connotation_std":              {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "core_competitive_advantage_std":           {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "target_consumers_std":                     {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "consumption_scenario_std":                 {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "core_selling_points_std":                  {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "product_features_std":                     {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "regional_market_preference_match_std":     {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "cigarette_holder_std":                     {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-        "target_competitors_std":                   {"method": "fillna", "opt": "fill", "value": "无", "type": "str"},
-    }
-
-class OrderConfig:
-    FEATURE_COLUMNS = [
-        "cust_code",                      # 零售户编码
-        "product_code",                   # 品牌规格编码
-        "sale_qty",                       # 销量包
-        # "sale_qty_l",                     # 销量上期
-        # "sale_qty_hb",                    # 销量环比
-        # "sale_amt",                       # 销售额包
-    ]
-
-class OrderAnalysisConfig:
-    FEATURE_COLUMNS = [
-        "cust_code",                        # 商户编码
-        "product_code",                     # 品规编码
-        "order_number_stability",           # 订购次数稳定性
-        "order_quantity_stability",         # 订购量稳定性
-        "order_ratio_stability",            # 订购占比稳定性
-        "real_demand_stability"             # 真实需求稳定性
-    ]
-
-class ImportanceFeaturesMap:
-    CUSTOM_FEATURES_MAP = {
-        "busi_place_area_section":      "营业面积区间",
-        "rent_section": "租金区间",
-        "rent_price_section": "租金单价区间",
-        "busi_open_section": "营业开始时间区间",
-        "busi_close_section": "营业结束时间区间",
-        "is_chain_storename": "是否连锁",
-        "criterion_codename": "守法经营情况",
-        "market_info_codename":             "市场采集点情况",
-        "tag_codename":                     "卷烟价格执行情况",
-        "cooperate_codename":               "配合程度",
-        "store_appearance_name":            "店面形象",
-        "position_codename":                "商圈名称",
-        "sub_position_codename":            "次级商圈名称",
-        "zone_appraise_name":               "地段评价",
-        "choose_road_name":                 "路段评价",
-        "choose_address_name":              "选址",
-        "area_position_type_name":          "区域位置划分",
-        "area_func_type_name":              "区域功能划分",
-        "community_func_type_name":         "社区功能划分",
-        "rate_pay_type_name":               "纳税性质",
-        "order_cycle_type_name":            "订货周期",
-        "is_modern_terminalname":           "是否现代终端",
-        "modern_terminal_name":             "现代终端类型",
-        "cooperate_type_name":              "加盟类型",
-        "terminal_star_name":               "终端星级",
-        "star_terminal_name":               "星级终端类型",
-        "appearance_span_section":          "门面跨度区间",
-        "upholster_name":                   "店内装潢名称",
-        "shop_feature_name":                "门店特色名称",
-        "shop_char_type_name":              "经营特色名称",
-        "has_taste_name":                   "是否卷烟品吸区",
-        "show_area_section":                "卷烟成列面积区间",
-        "sign_status_name":                 "是否有店招门头(店招门头状态)",
-        "shopsunny_vi_name":                "现代终端VI门头名称",
-        "header_name":                      "门头标识",
-        "counter_status_name":              "地柜状态",
-        "counter_number":                   "地柜个数",
-        "counter_put_type_name":            "地柜陈列样式",
-        "back_counter_status_name":         "背柜状态",
-        "back_counter_put_type_name":       "背柜陈列样式",
-        "back_counter_style_name":          "背柜样式",
-        "back_counter_number":              "背柜个数",
-        "back_counter_has_show_name":       "背柜条烟陈列区状态",
-        "legal_person_gender":              "法人性别",
-        "legal_education_name":             "法人文化程度",
-        "legal_is_cpc_member":              "法人是否为党员",
-        "operator_person_gender":           "经营者性别",
-        "operator_education_name":          "经营者文化程度",
-        "operator_is_cpc_member":           "经营者是否为党员",
-        "market_type_name":                 "市场类型名称",
-        "busi_place_codename":              "经营业态名称",
-        "sub_busi_codename":                "业态细分名称",
-        "sub_market_type_name":             "城乡分类名称",
-        "creditclass_name":                 "信用等级名称",
-    }
-    
-    PRODUCT_FEATRUES_MAP = {
-        "factory_name":              "产地",
-        "brand_name":                "品牌名称",
-        "is_low_tar":                "低焦油卷烟",
-        "is_medium":                 "中支烟",
-        "is_tiny":                   "细支烟",
-        "is_coarse":                 "粗支烟",
-        "is_exploding_beads":        "爆珠烟",
-        "is_abnormity":              "异形包装",
-        "is_cig":                    "雪茄烟",
-        "is_chuangxin":              "创新品类",
-        "direct_retail_price":       "卷烟建议零售价",
-        "tbc_total_length":          "烟支总长度",
-        "product_style":             "包装类型",
-    }
-    
-class DeliveryConfig:
-    FEATURE_COLUMNS = [
-        "customer_code",            # 零售户代码
-        "goods_code",               # 卷烟代码
-        "retail_index_week",        # 周市场零售价格监测指数
-        "turnover_rate_collpoint",  # 采集点销售量动销率(周)
-        "turnover_rate_terminal",   # 零售终端销售量动销率(周)
-        "sale_qty",                 # 周销售量
-    ]
-    
-    CLEANING_RULES = {
-        "retail_index_week":                    {"method": "fillna", "opt": "fill", "value": 0.0000, "type": "num"},
-        "turnover_rate_collpoint":              {"method": "fillna", "opt": "fill", "value": 0.0000, "type": "num"},
-        "turnover_rate_terminal":               {"method": "fillna", "opt": "fill", "value": 0.0000, "type": "num"},
-        "sale_qty":                             {"method": "fillna", "opt": "fill", "value": 0, "type": "num"},
-    }
-    
-    FEATURES_MAP = {
-        "retail_index_week": "市场零售价格监测指数(周)",
-        "turnover_rate_collpoint": "采集点销售量动销率(周)",
-        "turnover_rate_terminal": "零售终端销售量动销率(周)",
-        "sale_qty": "周销售量"
-    }

+ 2 - 2
models/rank/data/dataloader.py

@@ -1,5 +1,5 @@
 import pandas as pd
-from models.rank.data.config import CustConfig, ProductConfig, ShopConfig
+from models.rank.data.config import CustConfig, ProductConfig
 from sklearn.model_selection import train_test_split
 from sklearn.preprocessing import StandardScaler,MinMaxScaler
 from models.rank.data.utils import one_hot_embedding
@@ -23,7 +23,7 @@ class DataLoader:
         )
         self._gbdt_data = sampled_data
         
-        self._onehot_feats = {**CustConfig.ONEHOT_CAT, **ProductConfig.ONEHOT_CAT, **ShopConfig.ONEHOT_CAT}
+        self._onehot_feats = {**CustConfig.ONEHOT_CAT, **ProductConfig.ONEHOT_CAT}
         
         self._onehot_columns = list(self._onehot_feats.keys())
         self._numeric_columns = self._gbdt_data.drop(self._onehot_columns + ["label"], axis=1).columns

+ 27 - 27
models/rank/data/preprocess.py

@@ -1,5 +1,5 @@
 from database import MySqlDao
-from models.rank.data.config import CustConfig, ProductConfig, OrderConfig, ShopConfig
+from models.rank.data.config import CustConfig, ProductConfig, OrderConfig
 import os
 import pandas as pd
 from sklearn.preprocessing import MinMaxScaler
@@ -17,8 +17,8 @@ class DataProcess():
         print("gbdr-lr: 正在加载order_info...")
         self._order_data = self._mysql_dao.load_order_data(city_uuid)
         # self._order_data = self._mysql_dao.load_mock_order_data()
-        print("gbdr-lr: 正在加载shopping_info...")
-        self._shopping_data = self._mysql_dao.load_shopping_data(city_uuid)
+        # print("gbdr-lr: 正在加载shopping_info...")
+        # self._shopping_data = self._mysql_dao.load_shopping_data(city_uuid)
         
     def data_process(self):
         """数据预处理"""
@@ -30,13 +30,13 @@ class DataProcess():
         self._cust_data = self._cust_data[CustConfig.FEATURE_COLUMNS]
         self._product_data = self._product_data[ProductConfig.FEATURE_COLUMNS]
         self._order_data = self._order_data[OrderConfig.FEATURE_COLUMNS]
-        self._shopping_data = self._shopping_data[ShopConfig.FEATURE_COLUMNS]
+        # self._shopping_data = self._shopping_data[ShopConfig.FEATURE_COLUMNS]
         
         # 2. 数据清洗
         self._clean_cust_data()
         self._clean_product_data()
         self._clean_order_data()
-        self._clean_shopping_data()
+        # self._clean_shopping_data()
         
         # 3. 生成训练数据集
         train_data = self._generate_train_data()
@@ -45,7 +45,7 @@ class DataProcess():
 
     def _clean_cust_data(self):
         """用户信息表数据清洗"""
-        self._cust_data["BB_RETAIL_CUSTOMER_CODE"] = self._cust_data["BB_RETAIL_CUSTOMER_CODE"].astype(str)
+        self._cust_data["cust_code"] = self._cust_data["cust_code"].astype(str)
         # 根据配置规则清洗数据
         for feature, rules, in CustConfig.CLEANING_RULES.items():
             if rules["type"] == "num":
@@ -87,29 +87,29 @@ class DataProcess():
         self._order_data = self._order_data.groupby(["cust_code", "product_code"], as_index=False)["sale_qty"].mean()
         
         
-    def _clean_shopping_data(self):
-        """处理商圈数据缺省值"""
-        self._shopping_data["cust_code"] = self._shopping_data["cust_code"].astype(str)
-        # 根据配置规则清洗数据
-        for feature, rules, in ShopConfig.CLEANING_RULES.items():
-            if rules["type"] == "num":
-                # 先将数值型字符串转换为数值
-                self._shopping_data[feature] = pd.to_numeric(self._shopping_data[feature], errors="coerce")
+    # def _clean_shopping_data(self):
+    #     """处理商圈数据缺省值"""
+    #     self._shopping_data["cust_code"] = self._shopping_data["cust_code"].astype(str)
+    #     # 根据配置规则清洗数据
+    #     for feature, rules, in ShopConfig.CLEANING_RULES.items():
+    #         if rules["type"] == "num":
+    #             # 先将数值型字符串转换为数值
+    #             self._shopping_data[feature] = pd.to_numeric(self._shopping_data[feature], errors="coerce")
                 
-            if rules["method"] == "fillna":
-                if rules["opt"] == "fill":
-                    self._shopping_data[feature] = self._shopping_data[feature].fillna(rules["value"]).infer_objects(copy=False)
-                elif rules["opt"] == "replace":
-                    self._shopping_data[feature] = self._shopping_data[feature].fillna(self._shopping_data[rules["value"]]).infer_objects(copy=False)
-                elif rules["opt"] == "mean":
-                    self._shopping_data[feature] = self._shopping_data[feature].fillna(self._shopping_data[feature].mean()).infer_objects(copy=False)
-                self._shopping_data[feature] = self._shopping_data[feature].infer_objects(copy=False)
+    #         if rules["method"] == "fillna":
+    #             if rules["opt"] == "fill":
+    #                 self._shopping_data[feature] = self._shopping_data[feature].fillna(rules["value"]).infer_objects(copy=False)
+    #             elif rules["opt"] == "replace":
+    #                 self._shopping_data[feature] = self._shopping_data[feature].fillna(self._shopping_data[rules["value"]]).infer_objects(copy=False)
+    #             elif rules["opt"] == "mean":
+    #                 self._shopping_data[feature] = self._shopping_data[feature].fillna(self._shopping_data[feature].mean()).infer_objects(copy=False)
+    #             self._shopping_data[feature] = self._shopping_data[feature].infer_objects(copy=False)
     
     def _generate_train_data(self):
         """生成训练数据"""
-        # 将商户表与商圈表进行连接
-        cust_feats = self._shopping_data.set_index("cust_code")
-        self._cust_data = self._cust_data.join(cust_feats, on="BB_RETAIL_CUSTOMER_CODE", how="inner")
+        # # 将商户表与商圈表进行连接
+        # cust_feats = self._shopping_data.set_index("cust_code")
+        # self._cust_data = self._cust_data.join(cust_feats, on="BB_RETAIL_CUSTOMER_CODE", how="inner")
         
         union_data = self._union_order_cust_product()
         
@@ -121,8 +121,8 @@ class DataProcess():
         """联合order表、商户表、卷烟表"""
         # 使用merge进行连接
         union_data = self._order_data.merge(self._product_data, on="product_code", how="inner")
-        union_data = union_data.merge(self._cust_data, left_on='cust_code', right_on='BB_RETAIL_CUSTOMER_CODE', how="inner")
-        union_data = union_data.drop(columns=['BB_RETAIL_CUSTOMER_CODE'])
+        union_data = union_data.merge(self._cust_data, left_on='cust_code', right_on='cust_code', how="inner")
+        # union_data = union_data.drop(columns=['cust_code'])
         
         return union_data
         

+ 11 - 0
models/rank/data/utils.py

@@ -1,4 +1,6 @@
 import pandas as pd
+import re
+
 def one_hot_embedding(dataframe, onehout_feat):
     """对数据的指定特征做embedding编码"""
     # 先将指定的特征进行Categorical处理
@@ -10,6 +12,15 @@ def one_hot_embedding(dataframe, onehout_feat):
         prefix_sep="_",
         dtype=int,
     )
+
+    # 清理列名中的特殊字符,避免 LightGBM 报错
+    # 将 JSON 特殊字符替换为下划线或删除
+    dataframe.columns = [
+        re.sub(r'[",\\\n\r\t\b\f]', '_', col)  # 替换 JSON 特殊字符
+        .replace(' ', '_')                      # 替换空格
+        for col in dataframe.columns
+    ]
+
     return dataframe
 
 def sample_data_clear(data, config):

+ 34 - 17
models/rank/gbdt_lr_inference.py

@@ -1,13 +1,19 @@
 import gc
 import joblib
+import re
 # from dao import Redis, get_product_by_id, get_custs_by_ids, load_cust_data_from_mysql
 from database import RedisDatabaseHelper, MySqlDao
 from models.rank.data import DataLoader
-from models.rank.data import ProductConfig, CustConfig, ShopConfig, ImportanceFeaturesMap
+from models.rank.data import ProductConfig, CustConfig, ImportanceFeaturesMap
 from models.rank.data.utils import one_hot_embedding, sample_data_clear
 import numpy as np
 import pandas as pd
 from sklearn.preprocessing import StandardScaler
+
+def clean_column_name(col):
+    """清理列名中的特殊字符,与 one_hot_embedding 保持一致"""
+    return (re.sub(r'[",\\\n\r\t\b\f]', '_', col)
+            .replace(' ', '_'))
 import shap
 from tqdm import tqdm
 import os
@@ -19,11 +25,11 @@ def generate_feats_map(product_data, cust_data):
     product_data["descartes"] = 1
     feats_map = pd.merge(cust_data, product_data, on="descartes").drop("descartes", axis=1)
     # recall_cust_list = feats_map["BB_RETAIL_CUSTOMER_CODE"].to_list()
-    feats_map.drop('BB_RETAIL_CUSTOMER_CODE', axis=1, inplace=True)
+    feats_map.drop('cust_code', axis=1, inplace=True)
     feats_map.drop('product_code', axis=1, inplace=True)
         
     # onehot编码
-    onehot_feats = {**CustConfig.ONEHOT_CAT, **ProductConfig.ONEHOT_CAT, **ShopConfig.ONEHOT_CAT}
+    onehot_feats = {**CustConfig.ONEHOT_CAT, **ProductConfig.ONEHOT_CAT}
     onehot_columns = list(onehot_feats.keys())
     numeric_columns = feats_map.drop(onehot_columns, axis=1).columns
     feats_map = one_hot_embedding(feats_map, onehot_feats)
@@ -79,7 +85,7 @@ class GbdtLrModel:
         feats_names = self.gbdt_model.feature_name_
         importance_dict = dict(zip(feats_names, feats_importance))
         
-        onehot_feats = {**CustConfig.ONEHOT_CAT, **ShopConfig.ONEHOT_CAT, **ProductConfig.ONEHOT_CAT}
+        onehot_feats = {**CustConfig.ONEHOT_CAT, **ProductConfig.ONEHOT_CAT}
         for feat, categories in onehot_feats.items():
             related_columns = [f"{feat}_{item}" for item in categories]
             
@@ -102,8 +108,6 @@ class GbdtLrModel:
         for feat, importance in sorted_importance:
             if feat in list(ImportanceFeaturesMap.CUSTOM_FEATURES_MAP.keys()):
                 cust_features_importance.append({ImportanceFeaturesMap.CUSTOM_FEATURES_MAP[feat]: float(importance)})
-            if feat in list(ImportanceFeaturesMap.SHOPING_FEATURES_MAP.keys()):
-                cust_features_importance.append({ImportanceFeaturesMap.SHOPING_FEATURES_MAP[feat]: float(importance)})
             if feat in list(ImportanceFeaturesMap.PRODUCT_FEATRUES_MAP.keys()):
                 product_features_importance.append({ImportanceFeaturesMap.PRODUCT_FEATRUES_MAP[feat]: float(importance)})
                 
@@ -157,16 +161,16 @@ class GbdtLrModel:
                 columns=data.columns
             )
             
-            # 分离卷烟和商户特征
+            # 分离卷烟和商户特征(应用列名清理)
             product_feats = [
-                f"{feat}_{item}" 
+                clean_column_name(f"{feat}_{item}")
                 for feat, categories in ProductConfig.ONEHOT_CAT.items()
                 for item in categories
             ]
-            
+
             cust_feats = [
-                f"{feat}_{item}"
-                for feat, categories in {**CustConfig.ONEHOT_CAT, **ShopConfig.ONEHOT_CAT}.items()
+                clean_column_name(f"{feat}_{item}")
+                for feat, categories in {**CustConfig.ONEHOT_CAT}.items()
                 for item in categories
             ]
             
@@ -193,20 +197,33 @@ class GbdtLrModel:
             # 替换特征名称
             feats_name_map = {
                 **ImportanceFeaturesMap.CUSTOM_FEATURES_MAP, 
-                **ImportanceFeaturesMap.SHOPING_FEATURES_MAP, 
                 **ImportanceFeaturesMap.PRODUCT_FEATRUES_MAP
             }
             
             for item in results:
                 # 处理产品特征名
                 product_f = item["product_feat"]
-                product_infos = product_f.split("_")
-                item["product_feat"] = f"{feats_name_map['_'.join(product_infos[:-1])]}({product_infos[-1]})"
-                
+                product_feat_name = None
+                product_feat_value = None
+                for key in feats_name_map.keys():
+                    if product_f.startswith(key + "_"):
+                        product_feat_name = feats_name_map[key]
+                        product_feat_value = product_f[len(key) + 1:]
+                        break
+                if product_feat_name:
+                    item["product_feat"] = f"{product_feat_name}({product_feat_value})"
+
                 # 处理客户特征名
                 cust_f = item["cust_feat"]
-                cust_infos = cust_f.split("_")
-                item["cust_feat"] = f"{feats_name_map['_'.join(cust_infos[:-1])]}({cust_infos[-1]})"
+                cust_feat_name = None
+                cust_feat_value = None
+                for key in feats_name_map.keys():
+                    if cust_f.startswith(key + "_"):
+                        cust_feat_name = feats_name_map[key]
+                        cust_feat_value = cust_f[len(key) + 1:]
+                        break
+                if cust_feat_name:
+                    item["cust_feat"] = f"{cust_feat_name}({cust_feat_value})"
             
             # 返回最终结果
             return pd.DataFrame(results, columns=['product_feat', 'cust_feat', 'relation'])

+ 1 - 1
models/recall/hot_recall_ori.py

@@ -33,7 +33,7 @@ class HotRecallModel:
         :return: 所有热度指标的得分
         :rtype: list
         """
-        results = self._order_data.groupby("BB_RETAIL_CUSTOMER_CODE")[hot_name].mean().reset_index()
+        results = self._order_data.groupby("cust_code")[hot_name].mean().reset_index()
         sorted_results = results.sort_values(by=hot_name, ascending=False).reset_index(drop=True)
         item_hot_score = []
         # mock热度召回最大分数

+ 5 - 5
models/recommend.py

@@ -2,7 +2,7 @@ from database.dao.mysql_dao import MySqlDao
 from database.db.redis_db import RedisDatabaseHelper
 import os
 from models.item2vec.inference import Item2VecModel
-from models.rank.data.config import CustConfig, ProductConfig, ShopConfig
+from models.rank.data.config import CustConfig, ProductConfig
 from models.rank.data.utils import sample_data_clear
 from models.rank import GbdtLrModel, generate_feats_map
 import pandas as pd
@@ -59,12 +59,12 @@ class Recommend:
         
         # 获取整合商户数据
         cust_data = self._dao.get_cust_by_ids(self._city_uuid, recall_cust_list)[CustConfig.FEATURE_COLUMNS]
-        shop_data = self._dao.get_shop_by_ids(self._city_uuid, recall_cust_list)[ShopConfig.FEATURE_COLUMNS]
+        # shop_data = self._dao.get_shop_by_ids(self._city_uuid, recall_cust_list)[ShopConfig.FEATURE_COLUMNS]
         cust_data = sample_data_clear(cust_data, CustConfig)
-        shop_data = sample_data_clear(shop_data, ShopConfig)
+        # shop_data = sample_data_clear(shop_data, ShopConfig)
         
-        cust_feats = shop_data.set_index("cust_code")
-        cust_data = cust_data.join(cust_feats, on="BB_RETAIL_CUSTOMER_CODE", how="inner")
+        # cust_feats = shop_data.set_index("cust_code")
+        # cust_data = cust_data.join(cust_feats, on="BB_RETAIL_CUSTOMER_CODE", how="inner")
         
         # 获取推理用的feats_map
         feats_map = generate_feats_map(product_data, cust_data)

+ 5 - 5
utils/report_utils.py

@@ -1,6 +1,6 @@
 from database.dao.mysql_dao import MySqlDao
 from models import Recommend
-from models.rank.data.config import CustConfig, ImportanceFeaturesMap, ProductConfig, ShopConfig, DeliveryConfig
+from models.rank.data.config import CustConfig, ImportanceFeaturesMap, ProductConfig, DeliveryConfig
 from models.rank.data.utils import sample_data_clear
 from models.rank import generate_feats_map
 
@@ -43,14 +43,14 @@ class ReportUtils:
         
         # 根据cust_lit获取商户信息和商圈信息
         cust_data = self._dao.get_cust_by_ids(self._city_uuid, recommend_list)[CustConfig.FEATURE_COLUMNS]
-        shop_data = self._dao.get_shop_by_ids(self._city_uuid, recommend_list)[ShopConfig.FEATURE_COLUMNS]
+        # shop_data = self._dao.get_shop_by_ids(self._city_uuid, recommend_list)[ShopConfig.FEATURE_COLUMNS]
         
         product_data = sample_data_clear(product_data, ProductConfig)
         cust_data = sample_data_clear(cust_data, CustConfig)
-        shop_data = sample_data_clear(shop_data, ShopConfig)
+        # shop_data = sample_data_clear(shop_data, ShopConfig)
         
-        cust_feats = shop_data.set_index("cust_code")
-        cust_data = cust_data.join(cust_feats, on="BB_RETAIL_CUSTOMER_CODE", how="inner")
+        # cust_feats = shop_data.set_index("cust_code")
+        # cust_data = cust_data.join(cust_feats, on="BB_RETAIL_CUSTOMER_CODE", how="inner")
         
         feats_map = generate_feats_map(product_data, cust_data)
         

+ 3 - 3
utils/reports_process.py

@@ -34,9 +34,9 @@ def calculate_delivery_by_recommend_data(recommend_data, recommend_cust_infos, d
     """根据推荐数据计算投放量,并生成推荐商户报告"""
     recommend_data = pd.DataFrame(recommend_data)
     
-    cust_ids = recommend_cust_infos.set_index("BB_RETAIL_CUSTOMER_CODE")
+    cust_ids = recommend_cust_infos.set_index("cust_code")
     recommend_data = recommend_data.join(cust_ids, on="cust_code", how="inner")
-    recommend_data = recommend_data[["cust_code", "BB_RETAIL_CUSTOMER_NAME", "recommend_score"]]
+    recommend_data = recommend_data[["cust_code", "cust_name", "recommend_score"]]
    # 1. 计算每个商户的理论应得数量(带小数)
     recommend_data["delivery_float"] = (
         recommend_data["recommend_score"] / recommend_data["recommend_score"].sum() * delivery_count
@@ -62,7 +62,7 @@ def calculate_delivery_by_recommend_data(recommend_data, recommend_cust_infos, d
         columns={
             "index": "推荐序号", 
             "cust_code": "商户编号", 
-            "BB_RETAIL_CUSTOMER_NAME": "商户名称", 
+            "cust_name": "商户名称", 
             # "sale_qty": "历史月均销量", 
             "recommend_score": "推荐系数", 
             "delivery_count": "建议投放量(条)"