【数据挖掘实战】——家用电器用户行为分析及事件识别(BP神经网络)

简介: 项目地址:Datamining_project: 数据挖掘实战项目代码

一、背景和挖掘目标


1、问题背景

  • 智能家居是利用先进的技术,融合个性需求,将与家居生活有关的各个子系统有机地结合在一起,通过网络化综合智能控制和管理,实现“以人为本”的全新生活体验。
  • 企业若能深入了解其产品在不同用户群的使用习惯,开发新功能,就能开拓新市场,实现产品的智能化。根据家居的智能化,分析客户行为,识别不同客户群的特征、加深对客户的理解等。(以热水器为例,分析客户行为)
  • 针对不同的客户群提供个性化产品、改进新产品的智能化的研发和制定相应的营销策略。


2、原始数据

用户用水数据表:包括了洗浴、洗手、洗脸、洗菜、做饭等用水行为

c46ed6d1eaa64a60a8229d351eb627d3.png3、挖掘目标

  • 根据热水器采集到的数据,划分一次完整用水事件;
  • 在划分好的一次完整用水事件中,识别出洗浴事件。


二、分析方法与过程


1、初步分析

  • 热水器在状态发生改变或者有水流状态时,每2秒会采集一条流水数据。因为用户行为不仅仅只有洗浴还存在其他的用水事件:比如洗手、洗菜等,所以热水器采集的数据来自各种不同的用水事件。
  • 基于热水器采集的数据,根据水流量和停顿时间间隔划分为不同大小的时间区间,每个区间是一个可理解的一次完整用水事件,并以热水器一次完整用水事件作为一个基本事件。
  • 从独立的用水事件中识别出其中属于洗浴的事件。


2、总体流程

f380a5c910b84550afcde5834df1e9d8.png

第一步:数据抽取

采用无放回随机抽样法抽取200家热水器用户,从2014年1月1日至2014年12月31日的用水记录作为原始建模数据。

属性名称 属性说明
热水器编码 热水器出厂编号
发生时间 记录热水器处于某状态的时刻
开关机状态 热水器是否开机
即热 即时加热
加热中 热水器处于对水进行加热的状态
保温中 热水器处于对水进行保温的状态
有无水流 热水水流量大于等于10L/min为有水,否则为无
实际温度 热水器中热水的实际温度
热水量 热水器热水的含量
水流量 热水器热水的水流速度  单位:L/min
节能模式

热水器的一种节能工作模式

预约洗 预约一个时间使用热水
即时洗 不预约直接使用热水器
加热剩余时间 加热到设定温度还需多长时间
当前设置温度 热水器加热时热水能够到达的最大温度

第二步:探索分析

为了探究用户真实用水停顿时间间隔的分布情况,统计用水停顿的时间间隔并作频率分布直方图。

image.png

停顿时间间隔为0~0.3分钟的频率很高,根据日常用水经验可以判断其为一次用水时间中的停顿;停顿时间间隔为6~13分钟的频率较低,分析其为两次用水事件之间的停顿间隔。两次用水事件的停顿时间间隔分布在3~7分钟与现场实验统计用水停顿的时间间隔近似。

第三步:数据的预处理

1、数据规约

属性规约:因“热水器编号”、“即热”、“即时洗” 、“有无水流” 、“预约洗”、 “节能模式”对建模无作用,可以去除。

数值规约:当热水器“开关机状态”为“关”且水流量为0时,说明热水器不处于工作状态,数据记录可以规约掉。

2、数据变换


一次完整用水事件的划分:用水状态记录中,水流量不为0表明用户正在使用热水;而水流量为0时用户用热水发生停顿或者用热水结束。水流量为0的状态记录之间的时间间隔如果超过一个阈值T,则从该段水流量为0的状态记录向前找到最后一条水流量不为0的用水记录作为上一次用水事件的结束;向后找到水流量不为0的状态记录作为下一个用水事件的开始。


///

af83ad626488464cb5e3e08567648f71.png

#-*-coding: utf-8-*-#用水事件划分importpandasaspdthreshold=pd.Timedelta('4 min') #阈值为分钟inputfile='data/water_heater.xls'#输入数据路径,需要使用Excel格式outputfile='tmp/dividsequence.xls'#输出数据路径,需要使用Excel格式data=pd.read_excel(inputfile)
data[u'发生时间'] =pd.to_datetime(data[u'发生时间'], format='%Y%m%d%H%M%S')
data=data[data[u'水流量'] >0] #只要流量大于0的记录d=data[u'发生时间'].diff() >threshold#相邻时间作差分,比较是否大于阈值data[u'事件编号'] =d.cumsum() +1#通过累积求和的方式为事件编号data.to_excel(outputfile)

用水事件阈值寻优:根据水流量和停顿时间间隔的阈值划分一次完整的用水事件。

7150b1c5d0b745b383be8a2816dd3837.png

#-*-coding: utf-8-*-#阈值寻优importnumpyasnpimportpandasaspdinputfile='data/water_heater.xls'#输入数据路径,需要使用Excel格式n=4#使用以后四个点的平均斜率threshold=pd.Timedelta(minutes=5)  #专家阈值data=pd.read_excel(inputfile)
data[u'发生时间'] =pd.to_datetime(data[u'发生时间'], format='%Y%m%d%H%M%S')
data=data[data[u'水流量'] >0]  #只要流量大于0的记录defevent_num(ts):
d=data[u'发生时间'].diff() >ts#相邻时间作差分,比较是否大于阈值returnd.sum() +1#这样直接返回事件数dt= [pd.Timedelta(minutes=i) foriinnp.arange(1, 9, 0.25)]
h=pd.DataFrame(dt, columns=[u'阈值'])  #定义阈值列h[u'事件数'] =h[u'阈值'].apply(event_num)  #计算每个阈值对应的事件数h[u'斜率'] =h[u'事件数'].diff() /0.25#计算每两个相邻点对应的斜率#df_test['col_name'].rolling(ma).mean()新版本---->pd.rolling_mean(df_test['col_name'], ma) 旧版本#pd.rolling_mean(h[u'斜率'].abs(), n)
h[u'斜率指标'] =h[u'斜率'].rolling(n).mean()  #采用后n个的斜率绝对值平均作为斜率指标ts=h[u'阈值'][h[u'斜率指标'].idxmin() -n]
#注:用idxmin返回最小值的Index,由于rolling_mean()自动计算的是前n个斜率的绝对值平均#所以结果要进行平移(-n)ifts>threshold:
ts=pd.Timedelta(minutes=4)
print(ts)

 属性构造:根据用水行为,需构造四类指标:时长指标、频率指标、用水的量化指标以及用水的波动指标。

3add54fe9293413b926b0e8bcbfc6cae.png

属性解释:

ec41aeecf2b94c31a0c3bdc9d728801d.png

候选洗浴事件:从大量的一次完整用水事件中筛选规则剔除可以明显判定不是洗浴的事件

筛选掉非常短暂的用水事件:一次完整的用水事件满足其中任意一个条件,就被判定为短暂用水事件,其筛选条件为:1、一次用水事件中总用水量(纯热水)小于y升;2、用水时长小于100秒;3、总用水时长小于120秒。


3、缺失值的处理

因存在网络故障等原因,导致用水数据状态记录缺失的情况,需要对缺失的数据状态记录进行添加。其添加方法:用水状态记录缺失的情况下,填充一条状态记录使水流量为0,发生时间加2秒,其余属性状态不变。


/

da7defa5727e47e6bd20ff6d93511547.png

第四步:构建专家样本

d3b50830f6ca4402930ecf36a4e72e4c.png

第五步:构建用水事件行为识别模型

1、洗浴识别模型

根据建模样本数据和用户记录的包含用水的用途、用水开始时间、用水结束时间等属性的用水日志,建立BP神经网络模型识别洗浴事件。

ebf115dfea394a6eaf27c002eb7f09c7.png

#-*-coding: utf-8-*-#建立、训练多层神经网络,并完成模型的检验from__future__importprint_functionimportpandasaspdinputfile1='../data/train_neural_network_data.xls'#训练数据inputfile2='../data/test_neural_network_data.xls'#测试数据testoutputfile='../tmp/test_output_data.xls'#测试数据模型输出文件data_train=pd.read_excel(inputfile1)  #读入训练数据(由日志标记事件是否为洗浴)
data_test=pd.read_excel(inputfile2)  #读入测试数据(由日志标记事件是否为洗浴)
y_train=data_train.iloc[:, 4].as_matrix()  #训练样本标签列x_train=data_train.iloc[:, 5:17].as_matrix()  #训练样本特征y_test=data_test.iloc[:, 4].as_matrix()  #测试样本标签列x_test=data_test.iloc[:, 5:17].as_matrix()  #测试样本特征fromkeras.modelsimportSequentialfromkeras.layers.coreimportDense, Dropout, Activationmodel=Sequential()  #建立模型model.add(Dense(11, 17))  #添加输入层、隐藏层的连接model.add(Activation('relu'))  #以Relu函数为激活函数model.add(Dense(17, 10))  #添加隐藏层、隐藏层的连接model.add(Activation('relu'))  #以Relu函数为激活函数model.add(Dense(10, 1))  #添加隐藏层、输出层的连接model.add(Activation('sigmoid'))  #以sigmoid函数为激活函数#编译模型,损失函数为binary_crossentropy,用adam法求解model.compile(loss='binary_crossentropy', optimizer='adam', class_mode="binary")
model.fit(x_train, y_train, nb_epoch=100, batch_size=1)  #训练模型model.save_weights('../tmp/net.model')  #保存模型参数r=pd.DataFrame(model.predict_classes(x_test), columns=[u'预测结果'])
pd.concat([data_test.iloc[:, :5], r], axis=1).to_excel(testoutputfile)
model.predict(x_test)

2、模型检验

通过某热水器用户记录了两周的热水器用水日志,将前一周的数据作为训练数据,后一周的数据作为测试数据。根据该热水器用户提供的用水日志与多层神经网络模型识别结果的比较,总共21条检测数据,准确识别了18条数据,模型对洗浴事件的识别准确率为85.5%。

fae1670dc325453a88c0f44aacc5932c.png


三、总结和思考


根据上述模型划分的结果,发现有时候会将两次(或多次)洗浴划分为一次洗浴,因为在实际情况中,存在着一个人洗完澡后,另一个人马上洗的情况,这中间过渡期间的停顿间隔小于阈值。针对两次(或多次)洗浴事件被合并为一次洗浴事件的情况,需要进行优化,对连续洗浴事件作识别,提高模型识别精确度。

判断连续洗浴的方法:对每次用水事件,建立一个连续洗判别指标。连续洗判别指标初始值为0,每当有一个属性超过设定的阈值,就给该指标加上相应的值,最后判别连续洗指标是否超过给定的阈值,如果超过给定的阈值,认为该次用水事件为连续洗事件。

————————————————

版权声明:本文为CSDN博主「Lingxw_w」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/lxwssjszsdnr_/article/details/129206418

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
机器学习/深度学习 算法
【Matlab智能算法】PSO优化(双隐层)BP神经网络算法
【Matlab智能算法】PSO优化(双隐层)BP神经网络算法
|
5天前
|
存储 监控 安全
企业如何建立网络事件应急响应团队?
建立企业网络事件应急响应团队是应对勒索软件等威胁的关键。团队的迅速、高效行动能减轻攻击影响。首先,企业需决定是外包服务还是自建团队。外包通常更经济,适合多数公司,但大型或有复杂IT环境的企业可能选择内部团队。团队包括应急响应小组和技术支持监控团队,前者专注于安全事件处理,后者负责日常IT运维和安全监控。团队应包括安全分析工程师、IT工程师、恶意软件分析师、项目经理、公关和法律顾问等角色。此外,选择合适的工具(如SIEM、SOAR、XDR),制定行动手册、合规政策,创建报告模板,并进行定期训练和演练以确保团队的有效性。外包时,理解团队构成和运作方式依然重要。
13 1
|
7天前
|
安全 JavaScript 前端开发
第十六届山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题—B模块安全事件响应/网络安全数据取证/应用安全
该内容描述了一次网络安全演练,包括七个部分:Linux渗透提权、内存取证、页面信息发现、数字取证调查、网络安全应急响应、Python代码分析和逆向分析。参与者需在模拟环境中收集Flag值,涉及任务如获取服务器信息、提权、解析内存片段、分析网络数据包、处理代码漏洞、解码逆向操作等。每个部分都列出了若干具体任务,要求提取或生成特定信息作为Flag提交。
11 0
|
7天前
|
安全 测试技术 网络安全
2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C安全事件响应/网络安全数据取证/应用安全
B模块涵盖安全事件响应和应用安全,包括Windows渗透测试、页面信息发现、Linux系统提权及网络安全应急响应。在Windows渗透测试中,涉及系统服务扫描、DNS信息提取、管理员密码、.docx文件名及内容、图片中单词等Flag值。页面信息发现任务包括服务器端口、主页Flag、脚本信息、登录成功信息等。Linux系统渗透需收集SSH端口号、主机名、内核版本,并实现提权获取root目录内容和密码。网络安全应急响应涉及删除后门用户、找出ssh后门时间、恢复环境变量文件、识别修改的bin文件格式及定位挖矿病毒钱包地址。
13 0
|
7天前
|
安全 测试技术 Linux
2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-A模块安全事件响应/网络安全数据取证/应用安全
该内容描述了一个网络安全挑战,涉及Windows和Linux系统的渗透测试以及隐藏信息探索和内存取证。挑战包括使用Kali Linux对Windows Server进行服务扫描、DNS信息提取、密码获取、文件名和内容查找等。对于Linux系统,任务包括收集服务器信息、提权并查找特定文件内容和密码。此外,还有对Server2007网站的多步骤渗透,寻找登录界面和页面中的隐藏FLAG。最后,需要通过FTP获取win20230306服务器的内存片段,从中提取密码、地址、主机名、挖矿程序信息和浏览器搜索关键词。
9 0
|
7天前
|
安全 测试技术 网络安全
2024年甘肃省职业院校技能大赛中职组 “网络安全”赛项竞赛样题-C模块安全事件响应/网络安全数据取证/应用安全
涉及安全事件响应和应用安全测试。需使用Kali对Windows Server2105进行渗透测试,包括服务扫描、DNS信息提取、管理员密码、文件名与内容、图片中单词等。另外,需收集win20230305的服务器端口、页面信息、脚本、登录后信息等。在Linux Server2214上,要获取SSH端口、主机名、内核版本并进行提权操作。网络安全响应针对Server2228,涉及删除后门用户、查找SSH后门时间、恢复环境变量、识别篡改文件格式和矿池钱包地址。最后,对lin20230509进行网站渗透,获取端口号、数据库服务版本、脚本创建时间、页面路径、内核版本和root目录下的flag文件内容
9 0
|
7天前
|
安全 测试技术 网络安全
2024年甘肃省职业院校技能大赛中职组“网络安全”赛项竞赛样题-B模块安全事件响应/网络安全数据取证/应用安全
该内容描述了一组网络安全相关的挑战,涉及Windows渗透测试、数字取证、Web安全和跨站脚本渗透。挑战包括使用Kali Linux对服务器进行扫描,提取特定服务信息、DNS、管理员密码、文件名和内容等。此外,需要分析pcapng数据包文件,找出恶意HTTP访问、扫描端口、密码和木马信息。还有Web渗透测试,需访问不同URL并解决提示以获取Flag。最后,涉及跨站脚本攻击,需在不同目录下满足条件获取弹框信息。每个部分都要求参与者找出特定的安全标志物(Flag)。
7 0
|
14天前
|
机器学习/深度学习 数据采集 TensorFlow
TensorFlow实战:构建第一个神经网络模型
【4月更文挑战第17天】本文简要介绍了如何使用TensorFlow构建和训练一个简单的神经网络模型,解决手写数字识别问题。首先,确保安装了TensorFlow,然后了解神经网络基础、损失函数和优化器以及TensorFlow的基本使用。接着,通过导入TensorFlow、准备MNIST数据集、数据预处理、构建模型(使用Sequential API)、编译模型、训练和评估模型,展示了完整的流程。这个例子展示了TensorFlow在深度学习中的应用,为进一步探索复杂模型打下了基础。
|
2月前
|
机器学习/深度学习 算法 PyTorch
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
66 2
|
3月前
|
机器学习/深度学习 算法
基于BP神经网络的手写体数字识别matlab仿真
基于BP神经网络的手写体数字识别matlab仿真