会思考的饮水机:基于时间序列分析节能30%+
本文来自AbleCloud研发团队的实践,通过对历史数据的建模,学习出特定的规律,并应用此规律预测某台饮水机在未来某个时间点是应该打开电源烧水还是关闭电源以节能。
概要
瑞典爱立信公司的最新研究报告显示,智能手机用户数量在2016年将首次超过功能手机,但两者都将在未来几年内迅速被物联网设备超越。该公司预计,到2018年,连接在物联网上的传感器、家电和机器的数量将超过手机,成为最大类别的连接设备。到2021年,全球280亿台连接设备中有近160亿台将是物联网设备,从智能城市、智能汽车和智能家庭到移动健康护理和诊断设备。
可以想象,到那时家家户户每时每刻都在使用着智能设备;然而,目前所谓的“智能设备”绝大部分都只是传统设备添加一个联网模块,添加一个或几个传感器,他们能汇报位置,用电量,感受温度湿度并上传这些数据;再进一步,他们可能能够听懂你说什么,可能能够看懂你在做什么(附加了语音识别和图像识别功能),然后呢?然后他们的行为仍然完全依赖或者部分依赖人类的指令:空调仍然需要人们通过APP或者语音来控制开关;体重秤仍然只能报告你这周涨了几两体重或者你的体脂现在维持在什么水平;早上窗帘仍然需要你告诉他开他才会开;饮水机仍然不知疲倦的烧呀烧。这样的设备虽然能听,能说,能看,但是仍然还不能思考,我们认为这样的智能设备还只是“伪智能”,还算不上真正的智能设备。
我们眼中的智能设备要会思考。空调了解你在什么季节喜欢什么温度、湿度;体重秤能根据你的健康状况推荐饮食,设置运动计划;饮水机知道什么时候该烧水,什么时候该休息等等。只有设备真的学会思考以后,才能把人从繁琐的对设备的管理工作中解放出来。这就是我们的目标——让设备学会思考。
基于此,我们尝试改造我们公司的“智能饮水机”。目前我们公司的智能饮水机只能连接wifi,定时通过wifi上报用电量,并能通过我们的云端Matrix系统对饮水机的开关进行控制。我们要让他变得更“智能”——能自主决定是否需要烧水,在什么时候烧水,在什么时候关闭。这样做至少有以下几个好处:
- 减少我们喝“千滚水”或者叫“千沸水”的次数;
- 节能环保;
- 解放我们自己,让我们每天下班时不用再记得去把饮水机的电源断掉,并且在早上来到公司还要记得把饮水机打开。
系统架构
我们的智能饮水机的自动控制功能是通过Matrix和Inspire来构建的。Matrix和Inspire是AbleCloud PaaS云平台上两个主要的系统。Matrix负责设备和用户的接入,以及对厂商的设备和用户进行管理,同时还允许厂商定制开发其需要的服务。Inspire是大数据分析平台,其存储用户、设备、App等数据,同时给我们的客户提供宏观和微观粒度的可视化数据分析功能(关于Matrix和Inspire的功能这里不展开说明,有兴趣的可以在www.ablecloud.cn上进行了解)。
智能饮水机总体架构图如图1。
- 联网的智能设备在联网**后会注册到Matrix平台,终端用户可以通过我们Matrix云平台对设备进行控制,比如:开机,关机等(取决于厂商开放给终端用户的权限)。
- 智能设备运行时的数据会定期通过UDS上报到Inspire系统中。
- Inspire系统中的算法模块对上报数据进行建模并输出模型。
- Inspire系统中的控制模块加载模型,并通过模型预测是否应该打开或者关闭饮水机,然后通过UDS对设备进行控制。
算法简述
我们的目标是给每一台饮水机安装一个大脑,让他们能够根据自己的历史行为学习出规律,从而在未来指导或控制其行为。本质上这是一个预测行为:通过对历史数据的建模,学习出特定的规律,并应用此规律预测某台饮水机在未来某个时间点是应该打开电源烧水还是关闭电源以节能。这里其实隐含了一个假设,饮水机使用者在相对的一段时间内(比如2周)的使用习惯是一定的。用机器学习语言描述就是:通过对历史数据建模,得到模型,并应用模型做预测;隐含假设:历史数据和未来的数据是同分布的。
思路
具体做法上有两个不同的思路:
根据用户过去对饮水机的开和关的操作情况,直接估计每天的开机时段和关机时段。现在市面上的某些智能空调、恒温器就是以这种方法为基础实现的。这种方法的优点是简单,不需要复杂的处理,能够快速转化成代码实现;缺点也很明显:需要有用户操作的数据;也不能识别出开机过程中用户不需要的时间段(比如饮水机虽然一整天都开机,但不代表每时每刻用户都需要)。这种方法只适合某些特定的场景,比如只能拿到设备操作信息,拿不到设备的用电量,或者其他设备相关的数据的情景。
把一天24小时(也可以是一周或者一个月,视不同的业务场景而定)离散化成若干时间段,构造成一个时间序列,然后借鉴经济学中时间序列分析的思路做预测。
在我们这个智能饮水机的场景下,一方面我们拿不到饮水机的操作行为数据,而且操作行为对预测饮水机的使用帮助不大;另一方面用电量更能描述饮水机的工作状态。因此我们在第二种方法上做一些来预测饮水机的使用情况。
方法
我们把一天的24小时划分成大小相等的K个时间窗,我们的饮水机每3秒会上报一次用电量,所以我们可以统计每个时间窗的用电量,这样我们把问题转化成一个标准的时间序列分析问题,可以用时间序列分析方法分析。
- 首先,我们的数据以天为周期循环的,不同天的同时段表现近似;
- 其次,我们的数据还是以周为周期循环的,周末的表现和非周末的表现是不同的;
- 再次,可以想象,随着季节的变化,对热水的需求也是有变化的,冬天自然会多一些,夏天自然会少一些,因此我们的数据还是有季节性的。
- 另外,我们的一台饮水机的热水供应量是有限的,如果公司的人增多,对热水的需求量增大,那么只能靠增加饮水机来解决,所以单看一台饮水机,是不具备长期变动趋势的特点的。
综上,可供我们选择的算法有:算术平均法、加权平均法以及不考虑长期变动趋势的季节指数法。
算数平均法
算数平均法就是以观察期数据之和除以求和时使用的数据个数(或资料期数),求得平均数。假设 为n期观察到的历史数据,那么算数平均数可依下列公式求得:
在此例中,我们尝试把不同天同时段的用电量数据放在一起,单独成为一个时间序列,然后运用此方法来预测某时段的用电量。
加权平均法
加权平均法就是在求平均数时,根据观察期各资料重要性的不同,分别给以不同的权数后加以平均的方法。这种方法能在一定程度上处理带长期变动趋势的情况。
假设x1,x2,……,xn为n期观察到的历史数据;w1,w2,……,wn为观察期资料相对应的权数,那么加权平均数可依下列公式求得:
这种方法的缺点是每一期的权数不是很容易确定,需要大量的实验对比。同样地,在此例中我们也把同一时段的数据汇总到一起单独成为一个时间序列,使用一组等差数列作为权重。
不考虑长期变动的季节指数法
上面两种方法实现简单,但是在预测周末的用电情况时需要人工干预。如果我们把周末和非周末理解成两个不同的季节,那么可以借鉴季节指数法。首先,我们通过把每周分为工作日和周末两个季节,先预测某一整天的用电量;然后再在天内的各个时段间采用“变种季节指数法”来预测某一时段的用电量(正常的季节指数法是根据已知的一个季节来推测另一个季节的结果,而这里的变种季节指数是通过总体的值来预测一个季节的值)。季节指数法可表示为下式:
其中:ŷi为待预测季节的值;yi为已知季节的值;a’i为待预测季节的季节指数;ai为已知季节的季节指数。
变种的季节指数法可表示为:
其中:ŷi为待预测季节的值;Y为一个周期的总值(这里指通过上一个季节指数法预测出来的值);a’i为待预测季节的季节指数。
判断开关机状态
以上方法用于预测某一时段的用电量,但当我们预测出用电量之后还需要判断这个时段是否应该开机。直观的,当某一时段的用电量很高的时候,这应该是饮水机处于用水期,应该打开;当某一时段的用电量比较低的时候,这应该是饮水机处于空闲期,应该关闭。因此,我们需要找到一个用来判断饮水机开关状态的电量阈值——T。阈值——T的选取也有多种方法,比如可以根据经验选择某一段无人使用时间的最大用电量;或者选择某一段有人使用时间的最小值;或者使用某一段时间用电量的平均值;当然也可以训练一个简单的二元分类器。
效果展示
在我们的模型中时间窗我们设置为0.5小时,即一天24小时划分为K=48个时间窗;我们使用过去一个月的数据进行训练;阈值我们在这里使用单个时间窗在全时段的用电量平均值作为阈值。即:
其中:K=48,eij表示第i天,第j个时间窗的用电量。通过对比三种不同的算法的效果,我们发现“不考虑长期变动的季节指数法”要略微优于“算数平均法”和“加权平均法”。这里我们仅展示我们的最终模型的效果。
应用了不考虑长期变动的季节指数法模型后,我们的饮水机开关时段如图2:
图2中,蓝色覆盖的时间段表示饮水机处于开机状态;白色区域的时间段表示饮水机处于关机状态。这个图是符合我们的直观认知的:22点到早上9点公司极少有人使用饮水机;中午会有一段时间大家在进行午休,不会使用饮水机;下午有段时间大家去吃完饭也不会使用饮水机。值得一提的是,下午16:30 ~ 17:00 这段时间大家不喝热水是我们无法通过经验判断出来的;这个时间段为什么是没有问题的呢?因为我们没有听到来自同事们的抱怨。
图3是应用了自动控制模型和没有应用自动控制模型各个时段用电量的对比。从中可以看到,在夜晚无人使用的时候,如果不做控制那么饮水机仍然会频繁反复的烧水、耗电;而在早上9点的时候模型组(红色)用电量比非模型组(蓝色)高很多的原因是经过一夜,饮水机的水很凉了,刚一开机就会用很多的电量去努力把冷水烧热。
图4是使用模型控制和不使用模型控制的一天中各个时段的总用电量的对比。从中我们可以看到,通过使用自动控制模型,在满足用水的需求的情况下,我们把一台饮水机的用电量从0.8度降到了0.53度,节约用电33.75%;同时我们还避免了同事们饮用大量的“千滚水”。
后续工作
以上工作我们只是在一台只能上报用电量的饮水机上做的尝试。虽然数据和特征都很少,但已经很大程度上能满足我们的需求了。然而,当智能设备拥有更多的传感器的时候,我们其实可以做更多更有意思的事。比如,如果饮水机能上报热水用量和冷水用量,那我们可以改进我们的算法获得更精准的结果;如果能够配合上检测房间是否有人的传感器,那么对夜晚的控制也会更加准确;甚至我们还可以结合实时的天气气温情况做更加人性化的控制。
另外,在算法层面我们还可以尝试更多的方法。比如ARMA、ARIMA算法都是在时间序列分析中使用的比较多的,我们现在也正在尝试使用这两个算法来解决我们的问题。同时,随着深度学习的发展,已经用人把LSTM算法用在了序列分析中,用于拟合某个曲线,未来我们也会尝试采用深度学习的方法来更好的学习用户习惯。
责编:周建丁([email protected])
2016 年 9 月 23-24 日,由 **** 和创新工场联合主办的“MDCC 2016 移动开发者大会• 中国”(Mobile Developer Conference China)将在北京• 国家会议中心召开,来自iOS、Android、跨平台开发、产品设计、VR开发、移动直播、人工智能、物联网、硬件开发、信息无障碍10个领域的技术专家将分享他们在各自行业的真知灼见。
从即日起至8月7日23:59,MDCC 2016移动开发者大会门票5折优惠。五人以上团购更有特惠,限量供应,预购从速。(票务详情链接)