自动迭代方案——行为序列异常检测项目B

AutoIterNSHSanhuanPluginDetector项目:

  1. 模型训练
  2. 外挂预测

1. 项目结构

1.1 Data模块

1.1.1 数据保存

Data Type Update Frequency Data Source Range
预测数据 每天 前一天数据
训练数据 每周五 37天前的周三开始,四周的数据采样

1.2 Training模块

1.2.1 迭代方案

Type Update Frequency Data Source Range
Sliding Window 每周五 初始与baseline相同,之后每次更新替换新一周的数据,即始终只包含44周的数据

1.2.2 甘特图

Mon 17Mon 24Mon 31Mon 07Mon 14Mon 21data sampled in 4 weeks data sampled in 4 weeks data sampled in 4 weeks Sliding WindowAuto-Iteration Schedule

1.2.3 模型保存

  • 模型目录命名规则:MODEL_DIR=${ds_start}_${ds_range}
Type Example
Sliding Window 20181219_28, 20181226_28, 20190102_28

1.3 Prediction模块

1.3.1 预测方案

Step Operation Description
1 样本获取 每天,获取前一天全天数据样本,保存至对应目录
2 模型预测 样本获取完毕后,馈入模型预测结果
3 关联画像 预测结果上传Hive,并关联画像表
4 结果上传 画像结果保存至MySQL

1.3.2 结果呈现

  • 画像结果
自动迭代方案——行为序列异常检测项目B

2. 启动脚本

2.1 Crontab定时任务

# sanhuangua_train
50 15 * * 5 bash /home/zhoujialiang/nsh_sanhuan_sl_auto/train.sh >/home/zhoujialiang/cron_sanhuangua_train.log 2>&1

# sanhuangua_predict
20 20 * * * bash /home/zhoujialiang/nsh_sanhuan_sl_auto/predict_daily.sh >/home/zhoujialiang/cron_sanhuangua_predict.log 2>&1

2.2 Shell模块任务

2.2.1 train.sh

#!/usr/bin/env bash
# Usage_1: bash train.sh

# 工作目录
WORK_DIR=/home/zhoujialiang/nsh_sanhuan_sl_auto

# 定义参数
last_wednesday=`date -d "wednesday -2 weeks" +%Y%m%d`       # 过去最近的周三
ds_start_old=`date -d "$last_wednesday -35 days" +%Y%m%d`   # 旧模型的数据样本开始日期
ds_start=`date -d "$last_wednesday -28 days" +%Y%m%d`       # 新模型的数据样本开始日期
ds_start_new=`date -d "$last_wednesday -7 days" +%Y%m%d`    # 新模型需更新的数据样本开始日期


# 复制重复数据至新目录
echo /usr/bin/python3 $WORK_DIR/update_data.py pos --old_dir ${ds_start_old}_28 --ds_start $ds_start --ds_num 28 &&
/usr/bin/python3 $WORK_DIR/update_data.py pos --old_dir ${ds_start_old}_28 --ds_start $ds_start --ds_num 28 &&
echo /usr/bin/python3 $WORK_DIR/update_data.py neg --old_dir ${ds_start_old}_28 --ds_start $ds_start --ds_num 28 &&
/usr/bin/python3 $WORK_DIR/update_data.py neg --old_dir ${ds_start_old}_28 --ds_start $ds_start --ds_num 28 &&

# 获取新id
echo /usr/bin/python3 $WORK_DIR/get_ids.py pos --ds_start $ds_start_new --ds_num 7 &&
/usr/bin/python3 $WORK_DIR/get_ids.py pos --ds_start $ds_start_new --ds_num 7 &&
echo /usr/bin/python3 $WORK_DIR/get_ids.py neg --ds_start $ds_start_new --ds_num 7 &&
/usr/bin/python3 $WORK_DIR/get_ids.py neg --ds_start $ds_start_new --ds_num 7

# 获取新序列
echo /usr/bin/python3 $WORK_DIR/dataloader.py --ds_start $ds_start_new --ds_num 7 --mode neg &&
/usr/bin/python3 $WORK_DIR/dataloader.py --ds_start $ds_start_new --ds_num 7 --mode neg &&
echo /usr/bin/python3 $WORK_DIR/dataloader.py --ds_start $ds_start_new --ds_num 7 --mode pos &&
/usr/bin/python3 $WORK_DIR/dataloader.py --ds_start $ds_start_new --ds_num 7 --mode pos

# 滑窗迭代模型
echo /usr/bin/python3 $WORK_DIR/BLSTMModel.py --ds_start $ds_start --ds_num 28 &&
/usr/bin/python3 $WORK_DIR/BLSTMModel.py --ds_start $ds_start --ds_num 28

2.2.2 predict.sh

#!/usr/bin/env bash
# Usage_1: bash predict_daily.sh

# 工作目录
WORK_DIR=/home/zhoujialiang/nsh_sanhuan_sl_auto

# 定义参数
ds_pred=`date -d "-4 days" +%Y%m%d`                 # 预测日期
last_friday=`date -d "friday -1 weeks" +%Y%m%d`     # 过去最近的周五
ds_start=`date -d "$last_friday -30 days" +%Y%m%d`  # 滑窗模型数据样本开始日期


# 全量样本id
echo /usr/bin/python3 $WORK_DIR/get_ids.py total --ds_start $ds_pred --ds_num 1 &&
/usr/bin/python3 $WORK_DIR/get_ids.py total --ds_start $ds_pred --ds_num 1 &&

# 拉取数据序列
echo /usr/bin/python3 $WORK_DIR/dataloader.py --ds_start $ds_pred --ds_num 1 &&
/usr/bin/python3 $WORK_DIR/dataloader.py --ds_start $ds_pred --ds_num 1 &&

# 模型预测
echo /usr/bin/python3 $WORK_DIR/blstm_predict.py $ds_pred --ds_start $ds_start --ds_num 28 &&
/usr/bin/python3 $WORK_DIR/blstm_predict.py $ds_pred --ds_start $ds_start --ds_num 28 &&

# 关联画像
echo /usr/bin/python $WORK_DIR/nsh_antiplugin_sanhuan_ban.py $ds_pred blstm &&
/usr/bin/python $WORK_DIR/nsh_antiplugin_sanhuan_ban.py $ds_pred blstm

2.3 Python文件构成

2.3.1 文件分类

  • data
    • update_data.py
    • get_ids.py
    • dataloader.py
  • train
    • BLSTMModel.py
  • predict
    • blstm_predict.py

2.3.2 流程图

hive
hbase
train
hive
hbase
predict
update_data.py
old_data
get_ids.py
ids
dataloader.py
new_data
train_data
BLSTMModel.py
model
get_ids.py
ids
dataloader.py
daily_data
blstm_predict.py
classification