8热水器用户行为分析与事件识别
8.1背景与挖掘目标
国内某智能热水器,在状态发生改变或有水流状态时会采集数据,该厂商根据采集到的数据进行用户行为分析,热水器不仅可以用来细雨还可以洗手、洗脸、刷牙、洗菜等。本案例基于热水器采集的时间序列数据,将顺序排列的离散的用水时间节点根据水流量和停顿时间间隔划分不同大小的时间区间,每个时间区间可以理解成一次完整用水事件。
挖掘目标:第一,根据热水器采集到的数据,划分一次完整用水事件;第二,划分好的完整用水事件中识别出洗浴事件。
数据大体情况如下
8.2 分析方法与过程
第一:对热水器用户的历史用水数据进行选择性抽取,构建专家样本
第二:对步骤一形成的数据集进行数据探索分析与预处理,包括探索用水事件时间间隔的分布、规约冗余属性、识别用水数据的缺失值,并对缺失值进行处理,根据建模的需要进行属性构造,根据以上处理对用水数据建立用水事件时间间隔识别模型和划分一次完整用水事件模型,在再一次完整用水事件划分结果的基础上,剔除短暂用水事件缩小识别范围
第三:在第二得到的建模样本数据的基础上,建立洗浴事件识别模型,对洗浴事件识别模型进行模型分析评价
第四:在第三中形成的模型结果应用并对洗浴事件划分进行优化
第五:调用洗浴事件识别模型,对实时监控的热水器流水数据进行洗浴事件自动识别。
8.3 数据预处理
本案例的数据集的特点是数据量涉及上万个用户而且每个用户每天的用水数据多达数万条存在缺失值、与分析主题无关属性或未直接反应应用水事件的属性等,在数据预处理阶段,针对这些情况相应的应用了缺失值处理、数据规约和属性构造等来解决这些问题。
8.3.1数据规约
案例采集到的数据属性非常的多,加之我们建模也需要不了这么多的数据,现在对建模数据进行数据规约
属性规约:要对热水器用户的洗浴行为的一般规律进行挖掘分析,所以热水器编号可以去除,在数据中的有无水流通过可以通过水流量反应,观察数据我们发现节能模式的数据都是关,对建模没有什么影响,现在我们可以把它去除。
数值规约:当热水器的开关状态为关时并且流水量为0时,说明热水器不处于工作状态,数据记录可以删除。
数据规约后的数据如下图:
8.3.2数据变换
案例的挖掘目标是对热水器用户的洗浴事件进行识别,这就需要从原始数据中识别出哪些状态记录是一个完整的用水事件,再识别出完整用水事件中的洗浴事件;而一次完整的用水事件是根据水流量和停顿时间间隔的阈值去划分的,SO,本案例还应建立阈值寻优模型,为了提高在一次完整用水事件中识别出洗浴事件,本案例建立了筛选规则以剔除那些肯定不是洗浴事件的数据,得到建模数据样本集。
(1) 一次完整用水事件划分模型
本案例首先需要在大量的记录中划分出哪些连续的数据是一次完整的用水事件。
在用水状态记录中,水流量不为0表面用户正在使用热水,而水流量为0时用户用热水发生提顿或者结束。如果水流量为0的状态记录之间的时间间隔超过阈值T,则从该段水流量为0的状态向前找到最后一条水流量不为0 的用水记录作为上一次用水事件结束;向后找到水流量不为0的状态记录作为下一个用水事件的开始。
代码如下:
# encoding=utf-8
#划分一次用水事件代码
import pandas as pd
threshold=pd.Timedelta(minutes=4)#阈值为4
inputfile=r'E:\PythonProject\python Data Analysis andMining\chapter10\demo\data\water_heater.xls'
outputfile=r'E:\PythonProject\python Data Analysis andMining\chapter10\demo\tmp\dividsequence.xls'
data=pd.read_excel(inputfile)
data[u'发生时间']=pd.to_datetime(data[u'发生时间']