第10章 家用电器用户行为分析与事件识别
本案例又是一个LM模型的应用。不过比较精彩的部分是时间序列数据的处理操作,进行的数据规约和特征提取部分。书中的代码除了贯序模型中一个错误外,其他并没有发现错误。不过因为本身对于时间序列的操作不是太熟悉,所以基本上就是跟着书中的代码走了一遍。
- 挖掘目标
1.1 根据热水器采集到的数据,划分一次完整的用水事件。
1.2 在划分好的一次完整的用水事件中,识别出洗浴事件。 - 分析方法和过程
2.1 对热水用户的历史用水数据进行选择性抽取,构建专家样本。
2.2 对步骤1形成的数据集进行数据探索与预处理。包括探索用水时间时间间隔的分布,规约冗余属性、识别用水数据的缺失值,并对缺失值进行处理,根据建模的需要进行属性构造等。
2.3 在步骤2的建模样数据基础上,建立洗浴事件识别模型,对洗浴事件识别模型进行分析评价。
2.4 对步骤3形成的模型结果应用并对洗浴事件划分进行优化。
2.5 调用洗浴时间识别模型,对实时监控的热水器流水数据进行洗浴时间自动识别。 - 数据预处理
在数据预处理中,我认为书中的提供的数据和描述有所不同。
在208页中,第3行中:
数据规约:当热水器“开关机状态”为关且水流量为0是,说明热水器不处于工作状态,数据记录可以规约掉。
而在water_heater.xls文件中提供的数据,明显是不满足要求的。如下图所示:
数据的开始两条就为开关机状态为“关”且水流量为0的数据。明显这个数据处理的部分是有问题的。
我根据文字部分要求,进行处理后,结果如下图,很巧的是这个处理后的数据前50条状态全部为关,而后50条状态全部为开,所以我截取了中间一部分45至55条的数据做为演示:
但是因为随后有一步处理中,把所有的水流量为0的数据全部去除了,所以数据最终还是统一的。
随后进行的是用水事件的划分。主要是通过了Timedelta和diff的配合使用,对连续两次中间差值大于4的部分进行划分。
用水事件阈值寻优模型是整个代码中我认为比较巧妙的地方。
不过比较有疑问的是以下代码:
if ts > threshold:
ts = pd.Timedelta(minutes = 4)
为什么当阈值大于专家阈值的时候,阈值是选择4呢?我认为应该是选择专家阈值的5啊。
不过好在这里没有发生这种情况,所以无论如何,不影响结果。
4. 模型构建
我仔细对照了书中的数据和后面提供的训练样本和测试样本的模型,我认为两组数据并非是同一来源的。而且训练样本的数量只有20几条,实在也太少了点吧。
而且我在训练过程中还发现了另外的问题,keras在第一次训练时有时能产生正确结果,但是第二次训练结果就会错误。我第一天晚上训练出了一个和书上结果基本相似的结果,第二天重新进行训练时,loss和acc始终保持不变,结果全部一致,不是全0就是全1。然后重启电脑,结果又会发生变化,再次训练,结果又错误。不知道其中原因在哪里。所以,以下结果保持谨慎态度。
模型构建部分基本和第6章是一样的,没有太多可以说的。而且结果本身也不令人满意。
总结:相较于模型构建,本篇中特征工程的时间序列操作才是重点。还需多多练习。
上一篇: 4.提出TSN的2048特征
下一篇: 【浅谈】main函数的三个参数