水用量数据预测模型建立和用户分类1
机 器 学 习 小 组 作 业 题目水用量数据预测模型建立和用户分类 《水用量数据预测模型建立和用户分类》《水用量数据预测模型建立和用户分类》 名称名称: :水用量数据预测模型建立和用户分类 简述简述:(1)基于居民用户历史水用量数据,解决以下问题:分析出居民 用户的水用量的规律;对用户进行分类;找出其中不合理用水的居民用 户;可根据规律预测用户未来一段时间的用水量。 (2)基于大用户历史 用水量数据,解决以下问题:分析出大用户的水用量规律;对用户进行 分类;当规律不匹配时进行提醒;根据规律预测用户未来一段时间的用 水量。 1、小用户数据 1.1 数据预处理 原始数据表中包含很多字段,需要删除无用字段。其次水表可能 出现故障,导致读数有问题,如水表读书为负值等一些问题。 (1)去除重复记录,将CST_ID、CAI_ID、CXD_NEW_READING、 CXD_USAGE 和 CXD_DATE相同的记录进行去重操作。 (2)将 CXD_USAGE 小于 0 的记录赋值为 0; (3)时间转换,数据库中数据毫秒格式存储,为了方便对日期进行 操作,故需要将时间转换为yyyy/MM/dd 的格式,其转换过程如下所 示: (4)校验 CXD_USAGE 值是否正确,这里通过 KETTLE 将当天 CXD_NEW_READING 与前一天 CXD_NEW_READING 进行求差, 然后将差值与 CXD_USAGE 对比,如果他们差值较大,说明 CXD_NEW_READING 读书有误或 CXD_USAGE 有误,则需要进行 校验操作,其过程如下图所示: 转换结果如下图所示: (5)对(4)所得结果进行去除无效值操作,将前一天后一天读数差 值与 CXD_USAGE 比较,若差值大于 10 则删除该记录;若当天读数 比前一天读书小,则说明读数有问题删除该记录; (6)求每个用户的用水量之和、平均值和标准差。 (7)求每个用户周一到周七用水量的平均值,如下图所示: 结果如下图所示: (8)合并记录,将总和、均值、方差和每周的的平均用水量合并到 一个表中,通过简单的 SQL 语句便可以完成, UPDATEUSER_VALA,USER_WEEKB -SETA.AVG_SUN=B.AVG_WEEK -WHEREA.CST_ID=B.CST_IDANDB.WEEK=7; 结果如下图所示: 1.2 聚类分析 K-means:k-means 算法接受参数 k ;然后将事先输入的 n 个数 据对象划分为 k 个聚类以便使得所获得的聚类满足:同一聚类中的 对象相似度较高;而不同聚类中的对象相似度较小。 聚类相似度是利 用各聚类中对象的均值所获得一个“中心对象” (引力中心)来进行 计算的。 K-means 算法是最为经典的基于划分的聚类方法,是十大经典数 据挖掘算法之一。K-means 算法的基本思想是:以空间中k 个点为中 心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新 各聚类中心的值,直至得到最好的聚类结果。 假设要把样本集分为 c 个类别,算法描述如下: (1)适当选择 c 个类的初始中心; (2)在第 k 次迭代中,对任意一个样本,求其到 c 个中心的距离, 将该样本归到距离最短的中心所在的类; (3)利用均值等方法更新该类的中心值; (4)对于所有的 c 个聚类中心,如果利用(2) (3)的迭代法更新后, 值保持不变,则迭代结束,否则继续迭代。 该算法的最大优势在于简洁和快速,综上所述, K-means 可以对用户 的用数量进行聚集。 (1)通过 Weka 打开数据,通过下图可以看出大部分用户的用水频 率是相差不大的,少数用户用水频率较高,达到 99.98%,少数用户 用水频率较低,个别用户基本不用水。 (2)在 Cluster 选项卡里选择 SimpleKmeans,设置参数 numClusters 为 4,并且忽略到其它属性,点击“Start”,得到如下结果。从图中可 以看出 Cluster3 中的用户用水频率较高,说明其用水是比较规律的, Cluster1 用水频率较低,说明是基本不用的,Cluster0 是一段时间用, 一段时间不用的,Cluster2 是偶尔用一下的。 聚类效果图如下图所示: (3)用户聚类分组结果如下图所示(只列举部分用户) : 1.3 用户用水规律分析 数据库中有很多 CXD_USAGE 为 0 的用户, 和每天用水量较大的 用户,由于是分析用户整体的用水规律, 所以这里只对正常用户的用 水情况进行分析。时间是对用户用水规律分析的重要因素, 所以这里 以周、年对用户进行分析。 (1)对原数据进行清洗,取出不符合规律的数据。然后求出每个用 户,每周一到周七的平均用数量,过程如下: 数据如下图所示: (2)使用 K-Means 算法进行聚类分析,设置 K=7,结果如图所示, 从图中可以看出,Cluster3 每周用水量较大,Cluster4 每周用水量偏 小。 (4)随机抽取 30 个用户对其每周用水量的均值进行分析, 从图中可 以看出,用户周六、周日用水量相对偏大,周五用水量相对偏低。 1.4 用水预测 用户每天用水预测,通过上面聚类分析,发现 Cluster3 中用户用 水是比较规律的,所以选取Cluster3 中数据集作为测试样本。操作如 下: (1)读取数据 (2)转换为时间序列 (3)user1、user2、user3 时间序列图像分别如下图所示: (4)从上面分析,整个曲线处于大致不变的水平,且随机变动在整 个时间序列范围内也可以认为是大致不变的, 所以该序列可以大致被 描述为一个相加模型,因此我们可以使用简单指数平滑法进行预测。 我们采用 R 中的 HoltWinters()函数,为了能够使用 HoltWinters 中的 指数平滑,我们需要进行参数设置:beta=FALSE 和 gamma=FALSE, 预测结果如下图: (5)以上三张图可以看出User1、User2、User3 的 alpha 参数的估计 值约分别为 0.1370064、0.06724179、0.05665951,User2、User3 非常 接近 0,说明该序列比较平稳。 (6)画出预测值和实际值,效果如下图所示: (7)从之前的 alpha 和上图,可见我们预测的过于平滑,效果并不 好,所以接下来使用 ARIMA 对未来一周用水量进行预测 通过以上步骤得到三个模型,分别为ARIMA(2,0,1),ARIMA(0,0,1), ARIMA(2,0,2),forecast 使用以上三个模型对未来一周用水量进行预 测: User1 未来 7 天实际用水量为 0.252, 0.245, 0.256, 0.242, 0.244, 0.210, 0.261,可以看出预测值跟实际用水量差距并不是很大。 User3 未来 7 天实际用水量为 0.452, 0.465, 0.506, 0.342, 0.486, 0.520, 0.368,可以看出预测值跟实际用水量差距并不是很大。 Series user1forecast$residuals 1 . 0 A C F - 0 . 2 0 0 . 2 0