智能物联网(以下简称AIoT)是一种将人工智能技术和物联网技术相结合而出现的前瞻性概念。
在AIoT的概念中,物联网中的设备和传感器能搜集到大量的数据,通过对数据进行人工智能的语义分析和处理,实现万物的数据化、万物的智联化,帮助使用者做出更好的决策。

尽管当前的IoT设备可以采集到大量数据,但是由于数据隐私法案日趋完善,IoT设备的数据受到越来越严格的保护,使得IoT设备容易变成多个独立的数据孤岛,数据的价值也将难以被利用。
随着联邦学习技术的提出和普及,以及边缘端设备的处理能力不断加强,联邦学习正迅速成为AIoT领域中数据隐私保护机器学习的一种有效方案,其主要思想是将计算放在边缘端设备中进行,保证数据不出本地,从而最大化保证用户的隐私数据不泄露。
下面介绍一个联邦学习在AIoT中的重要应用:预测社区住户的出行时间,从而帮助住户提供更好的出行建议(如打车预测、路线推荐等)。本案例是横向联邦学习在AIoT领域的应用实践。
案例的背景与动机
随着AIoT技术的发展,智慧城市、智能家居、智慧社区等概念层出不穷。智慧社区是指通过在社区中部署AIoT设备,采集社区住户的日常行为数据,再通过人工智能技术分析住户的行为习惯,为住户提供更好的出行建议(路线选择、出行提醒等),达到智能化管理的目的。
当前的智慧社区管理,一般是在各社区中安装AIoT设备,收集本小区住户的出行信息(住户通过打卡、二维码等方式录入出行信息)。

由于社区住户的行为数据属于个人隐私信息,在当前日趋严格的隐私保护法案监管下,不适合将数据上传到云端进行集中式处理,各社区的数据通常只能在本地进行独立的处理和分析,这种单点的数据处理方式效果非常有限,功能也仅局限于对本社区用户的简单统计分析(如本社区人口统计等)。例如杭州市2021年就发文,禁止社区通过摄像和门禁等设备收集业主信息。
因此,是否能有一种有效的方法,既能保护各社区的住户信息不泄露,又能将各社区联合起来,构成一张完整的智慧城市网络,进而对这张城市网络进行更深入的分析,为社区提供更智能化的管理方案,成为当前AIoT的热门研究方向。
联邦学习的出现提供了一种可行的解决方案,通过联邦学习技术的架构,一方面保证住户的信息数据不离开本地,另一方面能有效联合各社区的数据进行联合建模。
例如,通过联合部署在各社区的AIoT设备,利用联邦学习进行住户的出行预测分析,如预测用户的上班时间及目的地,从而提供有效的出行路线,避开出行高峰。首先,对本案例的基本设置进行如下综述:
• 本案例是横向联邦学习案例,联邦网络中的客户参与方共有10个社区。服务端由微众的云服务器提供。
• 本案例中覆盖10个社区分布。
• 本案例的目的如上所述:通过出行预测,为用户提供有效的出行路线和智能提醒等。
历史数据分析
社区住户出行数据通常包含住户的登记信息和历史出行记录,其中登记信息通常包含用户的性别、年龄等画像信息;历史出行记录通常包括住户ID、出行时间、出行地点、通行方式等字段。

其中“village_id”和“household_id”分别表示社区ID和住户ID信息,“opened_time”表示出行时间,“opened_location”表示出行目的地。
我们可以通过分析历史数据,为构建联邦学习模型提供更多的依据。首先,我们观察年龄对出行时间的影响:

观察不同住户群体的不同出行习惯,将住户分为了两组,一组是年龄大于60岁的,一组是年龄小于60岁的,按小时统计他们每天出行的时间。
可以看出,年龄大于60岁的住户早上出门的次数比较多,而年龄小于60岁的住户晚上出门的次数比较多。下面,我们再以个体为单位进行分析。
下图展示了4位住户的历史出行记录,对其历史数据进行可视化后,按天作为纵坐标单位,每一个小时区间作为横坐标,若该住户在第y天的第x小时区间有出行记录,则在(x,y)处画一个点进行标记。可以看出,不同住户的行为习惯同样存在较大差异。

通过上面两个数据维度的简单分析,我们不难发现,在社区出行问题上,传统的数据分析很难取得令人满意的效果:
首先,不同住户群体差异性很大,仅通过统计分析很难捕获到关键的统计规律性。
其次,单个社区的住户数量一般比较少,如果仅靠单个住户的数量进行建模,无法构建有效的机器学习模型。
为此,我们采用联邦学习的策略,联邦学习在保证数据不出本地的前提下,有效联合各方进行模型训练,这样既能保证数据的安全隐私,又能保证充分利用各方的数据提升模型效果。
出行时间预测模型
对于出行时间的预测,一个很自然的想法是把问题归结为回归问题,即通过用户的历史行为数据准确预测用户下一次的出行时间。但住户的出行时间具有一定的随机性,因此准确预测出行时间具有一定的难度。
事实上,绝大多数时候,我们并不需要一个准确值,而是需要一个大致的区间,比如我们常说的下班高峰期,通常是在晚上6点到晚上9点这个区间段,对区间的预测难度要比直接预测一个准确时间点(比如晚上6点30分)更低。
为此,我们将出行时间预测退化为一个多分类问题,将每一天的时间划分为多个区间段,预测用户出行的时间段。比如一种简单的划分是将24个小时区间均分为N等份,下图将24小时离散化为6个区间。

构造训练数据集
根据住户的历史数据对未来的出行进行预测,这是一个典型的时间序列建模问题,我们来考虑每一条训练样本(x,y)的构建:
首先是特征x的构造,特征构造包括两个层面的特征数据:
• 画像属性特征构建:通过住户的登记信息和历史出行,提取包括用户的性别、年龄,工作日出行频率(最近半年、最近一个月、最近一周等)、休息日出行频率(最近半年、最近一个月、最近一周等)等用户画像信息。
• 时间序列特征:时间序列建模问题,可以通过滑动窗口的方式来构建训练数据集。

假设当前处于第T天,那么我们可以把前面的N天构成一个时间序列:
将该序列作为递归神经网络的输入得到用户时序行为特征,其中每一天的输入数据FT-i包括是否为工作日;当前24个时间区间段中是否有出行记录等。

时序特征向量构建
训练集中标签y的构建则相对简单,前面已经提到将问题转化为多分类处理,假设将每天24个小时划分为6个区间,如果出行时间在早上7点,那么该条记录的标签数据为:[0,1,0,0,0,0]。当然,区间的划分可以根据实际业务情况制定,并没有统一的标准。
模型结构
将序列数据输入递归网络中提取时序特征向量,本案例采用LSTM网络作为递归网络模块,然后将其与画像属性特征拼接,接入全连接层,完整的结构图如下图。

模型结构的构建代码如下所示,这里使用Keras快速构建出行时间预测模型:

代码先读取配置文件,按照其设定,设置了时序特征的长度(即天数,sequence_length)、用户画像特征的长度(property_length)和每一天的输入特征长度(feature_num),并创建LSTM网络得到时序特征向量lstm_feature,将其与用户画像特征input_feature进行拼接后,得到混合向量mixed_feature,再接入全连接层,得到出行时间的预测概率。
联邦学习实现
先假设服务端与客户端之间的通信基本一致,主要区别在于数据的读取格式及模型结构的不同。

联邦客户端与联邦服务端的通信过程
性能分析
数据分布:在10个社区场景中,利用联邦学习对出行时间进行POC预测。首先看这10个社区场景的数据分布情况,我们选取了从2017年1月到2019年4月的小区住户打卡记录,总体情况见表

评估方式:将出行预测模型归结为多分类问题,为了实验的方便,在输出中,我们将每天24小时划分为6段,构成一个6分类,采用准确率作为评估标准,联邦模型与本地模型的训练结果对比如下图,其中的本地训练是指只利用本地的样本数据进行模型训练的结果。

每一个社区的数据分布可视化

联邦模型与本地模型的训练结果对比


