Skip to content

WikHClean/A5

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

设计:

• 运行环境设计:

    Windows10/11
    PyCharm2021

• 关键算法设计:

    1、计算平均缴费金额、平均缴费次数+居民客户类型归类
      1) 平均缴费金额:用户缴费总金额÷用户总人数
      2) 平均缴费次数:对数据集按‘用户编号’进行分组,count()进行分组计数,然后mean()求平均值
      3) 用户类型归类:将单个用户的平均缴费金额、平均缴费次数和任务1中所有用户的平均缴费金额、平均缴费次数分别进行比较

    2、预测高价值用户top5
       差分自回归移动平均模型(ARIMA)。平稳时间序列其差分为0,即ARIMA模型参数d=0;非平稳序列经过一阶差分\二阶差分变为平稳序列,其差分
       分别为1、2,即ARIMA模型参数d=1\d=2;接着对平稳序列进行白噪声检验,判断时间序列是否为随机数序列;然后根据AIC\BIC准则对参数p,q定
       阶,最后模型拟合后预测
  
    3、用户用电模型建立,为企业电力营销和调度进行决策人支撑
       利用kmeans算法,根据数据集中一天24小时作为划分基础,对每个小时用电量进行聚类分析预测。同时将天气,假期等作为影响因素考虑。
       具体方式如下:
         1) 选取K个点做为初始聚集的簇心
         2) 分别计算每个样本点到 K个簇核心的距离,找到离该点最近的簇核心,将它归属到对应的簇
         3) 所有点都归属到簇之后, M个点就分为了 K个簇。之后重新计算每个簇的重心(平均距离中心),将其定为新的“簇核心”;
         4) 反复迭代 2 - 3 步骤,直到达到某个中止条件

    4、 电力用户模型建立,根据不同的标准对用户进行划分:
        1) 用户行为特征:根据用户缴费习惯平均值对用户进行划分	
        2) 用户基本属性:根据用户每日用电能源情况对用户进行划分
        3) 电器设备使用:根据不同时期使用电量的平均值对用户进行划分
        4) 用电曲线心态:根据用户每日用电的电量曲线对用户进行划分

• 项目重难点:

1、如何高效地预测出高价值用户top5

       任务3是对多个用户进行预测,数据集Tianchi_power.csv中用户有1000多个,且每个用户有600多条时间记录,数据量太大。为了预测效率更高,
       先根据自定义高价值用户标准(用电量大于平均用电量)对1000多个用户进行筛选,选择出属于高价值用户的132个用户;然后我在高价值用户中
       随机抽取user_id为13\25\34\217\1442分别进行测试,发现这些用户的时间序列与ARIMA模型的拟合度都非常高,残差的自相关性分别为1.936\
       2.002\2.023\1.990\2.051,于是大胆猜测,其他用户也可以用ARIMA模型进行预测。在实验中,所有非平稳时间序列一阶差分之后全部变为平稳
       时间序列,然后采取for循环遍历平稳时间序列的user_id,采用BIC准则直接算出参数p,q值,即可预测出9月份每天的用电量。最后对所有用户预
       测值的平均值进行排序,得出top5。但显然这种方法由于for循环效率仍然不高。

2、用户用电模型建立

       任务4是建立模型,主要目的应该在于预测每一天中每个时间段的大概功率,考虑天气,节假日等因素的影响,应用相关数据根据对每天每个时段的
       用电量分析,最后以月为单位, 进行用户用电预测。在对不同时间段等因素进行聚类分析的时候,如果随机选取聚类中心容i使得结果不理想。我们
       对聚类中心的选择做出改进。首先选择中心然后得出中心与每个点之间的距离,不断聚类,直到中心选取完成。

3. 电力用户集群分析模型建立

       任务5是建立模型,主要目的是根据不同的标准对用户进行划分。采用的是k-means和k-means++算法的思路,更换标准对用户进行集群划分。k-means
       思路是首先在数据当中随机生成k个聚类中心,再计算数据当中每个样本到这k个聚类中心的距离,并将对应的样本分到距离最小的聚类中心所对应的簇当
       中,将所有样本归类之后,对于每一个k个簇重新计算每个簇的聚类中心,也就是每个簇中的所有样本的质心,重复上述操作,直到聚类中心不发生改变为止。
       k-means++算法思路是在数据集中随机选择一个样本点作为第一个初始化的聚类中心。选择出其余的聚类中心:计算样本中的每一个样本点与已经初始化
       的聚类中心之间的距离,并选择其中最短的距离。以概率选择距离最大的样本作为新的聚类中心,重复上述过程,直到k个聚类中心都被确定对k个初始化
       的聚类中心,利用K-Means算法计算最终的聚类中心。

知识原理:

 1. 计算平均缴费金额、平均缴费次数+居民客户类型归类
      数据分析库Pandas库。多种方法groupby()、count()、sum()、mean()、getattr()等综合运用

 2. 预测高价值用户top5
      ○ 时间序列的平稳性
      ○ 非平稳时间序列转换为平稳时间序列 —— 差分法
      ○ 时间序列的预处理 —— 平稳性检验(ADF检验)、白噪声检验 
      ○ 模型定阶 —— 采用BIC准则获取最佳的ARIMA模型参数p,q
      ○ D-W检验残差的自相关性,分析评估模型的好坏
      
 3. 电力用户集群分析模型建立
      1) k-means算法
         - 先随机选择中心点(质心),并初始化
         - 训练模型
         - 计算样本点到质心的距离,找到最近的
         - 进行中心点位置更新
      2) k-means++算法
      3) k-means算法的SSE检验

方案实现:

• 已完成

○ 计算平均缴费金额、平均缴费次数	
○ 居民客户类型归类	
○ 预测高价值用户top5
○ 电力用户模型
○ 电力客户行为分析

模型优化:

1、任务3:ARIMA模型参数的选择
     代替通过观察acf图和pacf图得到参数p,q的值,采取AIC/BIC准则直接获取p,q值,更为准确;
     同时采用BIC准则代替AIC准则,弥补了AIC在样本数据量过大时,模型精度过高导致的模型复杂度过高的不足,以此达到最优化
2、任务4:对初始聚类中心的选择做出改进
     首先把初始聚类中心数确定,然后进行聚类中心的选择。设算法已完成i个中心的选取,在选择下一个中心时,若此点距离当前i个中心点越远,
     则其被选概率越大。但如果i为1,则此算法与未改进前一样,即聚类中心随机选取。换句话说,算法改进前后的区别在于对初始点的处理
3、任务5:k-means聚类模型
     ·通过选择的标准根据模型进行聚类,可通过聚类结果排除异常样本,即和其它样本数目相处相差较大的单元,在对剩余的样本进行聚类
     ·使用肘部法:计算数据集中所有样本点到其簇中心的距离之和的平方,选取变化的拐点作为k值。

分析评估:

1、任务3

    ○ 利用D-W检验, 检验残差的自相关性。当D-W检验值接近于2时,不存在自相关性,说明模型较好
    ○ 代码运行结果表明,对于不同的高价值用户D-W检验值都在2周围波动,范围为1.94~2.06,模型较好

2、任务4

    ○ 检验总样本量,总特征数
    ○ 利用非监督式评估方法,计算平均轮廓系数,calinski和harabaz得分,silhouette_s大于0.5,说明聚类质量较优
      优秀与否的基本原则是不同类别间是否具有显著的区分效果。

3、任务5

    ○ SSE利用计算误方差和,来实现对不同K值的选取后,每个K值对应簇内的点到中心点的距离误差平方和,理论上SSE
    的值越小,代表聚类效果越好,通过数据测试,SSE的值会逐渐趋向一个最小值;同时增加迭代次数,观察聚类效果,
    发现到对应k值时,聚类效果变化不大,此时即为最佳k值
    ○ ‘峰值’聚类、‘激光企业’聚类、‘电力用户用电’聚类、‘能源’聚类、‘省份GDP电量’聚类、‘电力用户缴费行为’聚类
    的k值都为3;‘用户曲线形态’聚类k值选取为2,此时SSE值为0.3~0.4,模型较好
    ○ 根据所得的模型对每组数据进行聚类分析,聚类结果若样本输相差较大,则对样本多的再进行聚类分析,聚类效果更好

运行/部署:

所有代码的运行全部基于Window11系统,在PyCharm2021中运行
1、计算平均缴费金额、平均缴费次数+居民客户类型归类
    首先要将数据集cph.xlsx和exe文件放入同一个文件夹,直接运行exe文件即可
2、预测高价值用户top5
    首先将数据集Tianchi_power.csv和exe文件放入同一个文件夹,直接运行exe文件即可
3、电力用户用电模型
    在页面中设置好数据集与文件路径,点击对应按钮运行
4、电力用户集群划分
    首先将对应文件的csv数据集及pkl模型和exe文件放入同一个文件夹,分别运行每一个exe文件即可

数据来源:

• cph.xlsx                             
	○ 示例数据集
• Tianchi_power.csv 
	○ https://mp.weixin.qq.com/s?__biz=MzIxNjE1Njg4OA==&mid=100000074&idx=1&sn=3073ebdfd0a081cb6485e7f6c0e9afc9&chksm=178c1efd20fb97eb04586d0f6757f40eee42170a1d71196762cc33751a25df75adbc5d329821&mpshare=1&scene=23&srcid=0518olygZZCnGt2yLNZkepYU&sharer_sharetime=1652861545327&sharer_shareid=32db0bc2d3c4c22843f068f1a5ea1660#rd
      2015.01.01—2016.08.31中国江苏省扬中市1000多家企业每日用电量数据
• demo.xlsx                             
	○ 示例数据集
• household_power_consumption.csv
	○ https://s.r.sn.cn/tdd4jn
• user_log_count.csv
	○ 实例数据集
• 峰值.csv
	○ 实例数据集
• 激光企业.csv
	○ https://s.r.sn.cn/tdd4jn
• 省份GDP电量关系.csv
        ○ https://s.r.sn.cn/B7Yhs7

About

电力客户行为分析

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%