水用量数据预测模型建立和用户分类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_SUNB.AVG_WEEK -WHEREA.CST_IDB.CST_IDANDB.WEEK7; 结果如下图所示 1.2 聚类分析 K-meansk-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 算法进行聚类分析,设置 K7,结果如图所示, 从图中可以看出,Cluster3 每周用水量较大,Cluster4 每周用水量偏 小。 (4)随机抽取 30 个用户对其每周用水量的均值进行分析, 从图中可 以看出,用户周六、周日用水量相对偏大,周五用水量相对偏低。 1.4 用水预测 用户每天用水预测,通过上面聚类分析,发现 Cluster3 中用户用 水是比较规律的,所以选取Cluster3 中数据集作为测试样本。操作如 下 (1)读取数据 (2)转换为时间序列 (3)user1、user2、user3 时间序列图像分别如下图所示 (4)从上面分析,整个曲线处于大致不变的水平,且随机变动在整 个时间序列范围内也可以认为是大致不变的, 所以该序列可以大致被 描述为一个相加模型,因此我们可以使用简单指数平滑法进行预测。 我们采用 R 中的 HoltWinters函数,为了能够使用 HoltWinters 中的 指数平滑,我们需要进行参数设置betaFALSE 和 gammaFALSE, 预测结果如下图 (5)以上三张图可以看出User1、User2、User3 的 alpha 参数的估计 值约分别为 0.1370064、0.06724179、0.05665951,User2、User3 非常 接近 0,说明该序列比较平稳。 (6)画出预测值和实际值,效果如下图所示 (7)从之前的 alpha 和上图,可见我们预测的过于平滑,效果并不 好,所以接下来使用 ARIMA 对未来一周用水量进行预测 通过以上步骤得到三个模型,分别为ARIMA2,0,1,ARIMA0,0,1, ARIMA2,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 user1forecastresiduals 1 . 0 A C F - 0 . 2 0 0 . 2 0