异常检测的应用场景,分为两种情况:
(1)异常订单的分析。包括异常订单的主要特征、品类集中度、重点客户等,尤其是可以将异常订单联系人加入黑名单,以降低其对公司正常运营的干扰。
(2)订单的实时检测。订单实时检测后会将结果为异常的订单记录发送到审核部门,然后由审核部门做进一步审查。
本文的案例来自宋天龙老师的《python数据分析与数据化运营》第6章。主要学习技术包括:基本预处理:使用DictVectorize将字符型分类变量转换为数值型变量、使用SMOTE对不均衡样本做过抽样处理;数据建模:基于cross_val_score的交叉检验,基于LogisticRegression、RandomForest、Bagging概率投票组合的模型做分类。
一、案例数据
数据概况:特征数量:13
数据记录数:134190
是否有NA值:有
是否有异常:有
共有13个特征变量,包括:order_id: 订单ID,数字组合而成,例如:4324543267
order_date: 订单日期,格式为YYYY-MM-DD,例如2013-10-17
order_time: 订单时间,格式为HH:MM:SS,例如12:54:06
cat: 商品一级类别,字符串型,包含中文和英文。
attribution: 商品渠道来源,字符串型,包含中文和英文
pro_id: 商品ID,数字组合型
pro_brand: 商品品牌,字符串型,包含中文和英文
total_money: 商品销售金额,浮点型
total_quantity: 商品销售数量,整数型
order_source: 订单来源,从哪个渠道形成的销售,字符串型
pay_type: 支付类型,字符串型
use_id: 用户ID,由数字和字母等组成的字符串
city_id: 用户下订单时的城市,字符串型,中文。
目标变量:abnormal_label, 代表该订单记录是否为异常订单。
二、案例过程
步骤1: 导入库
import numpy as np
import pandas as pd
from sklearn.feature_extraction import DictVectorizer #数值分类转整数分类库
from imblearn.over_sampling import SMOTE #过抽样处理库SMOTE
from sklearn.model_selection import StratifiedKFold, cross_val_score #交叉检验算法
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import VotingClassifier, RandomForestClassifier, BaggingClassifierDictVectorizer:用于将定义好的字符串值和数值健值对做转换
SMOTE:用于处理样本不均衡的过抽样处理库
StratifiedKFold: 适用于有标签数据集的交叉检验数据集划分方法
cross_val_score: 通过交叉检验方法做模型效果评估
LogisticRegression,RandomForestClassifier, BaggingClassifier:三个集成分类库
VotingClassifier:用于分类的投票组合模型方法库
步骤2: 数据审查预处理函数
#基本状态查