机器学习task2的一点深入讨论#Datawhale AI 夏令营

探索性数据分析

        原文档(Docs)只简单给出了不同type类型对应target的柱状图和id为00037f39cf的按dt为序列关于target的折线图,这只能分析出整个数据集的部分特征,对于模型选择的参考性有限,因此在原文档的基础上,我尝试进行了一些统计学数据分析,并进行更全面的数据集的特征的可视化来帮助我们进行模型选择。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.read_csv('train.csv')

# 显示数据集的前几行,以了解数据结构
print(df.head())

# 基本的统计分析
print(df.describe())

# 检查是否有缺失值
print(df.isnull().sum())

# 可视化分析
# 1. 房屋类型的分布
plt.figure(figsize=(10, 6))
sns.countplot(x='type', data=df)
plt.title('Distribution of House Types')
plt.show()

# 2. 不同类型房屋的电力消耗
plt.figure(figsize=(10, 6))
sns.boxplot(x='type', y='target', data=df)
plt.title('Electricity Consumption by House Type')
plt.show()

# 3. 电力消耗随日期变化的趋势
plt.figure(figsize=(10, 6))
sns.lineplot(x='dt', y='target', data=df)
plt.title('Trend of Electricity Consumption Over Time')
plt.show()

# 4. 电力消耗的箱型图,以查看异常值
plt.figure(figsize=(10, 6))
sns.boxplot(y='target', data=df)
plt.title('Box Plot of Electricity Consumption')
plt.show()

# 5. 电力消耗与房屋类型的关联图
plt.figure(figsize=(10, 6))
sns.scatterplot(x='type', y='target', data=df)
plt.title('Scatter Plot of Electricity Consumption vs House Type')
plt.show()

# 6.均值
grouped_data = df.groupby(['dt', 'type'])['target'].mean().reset_index()
print(grouped_data)
plt.figure(figsize=(12, 8))
for type_name, group in grouped_data.groupby('type'):
    plt.plot(group['dt'], group['target'], label=type_name)

plt.title('Average Electricity Consumption by Day and House Type')
plt.xlabel('Day')
plt.ylabel('Average Electricity Consumption')
plt.legend()
plt.show()

得到的结果是

从这些数据中我们可以知道:

  1. 描述性统计

    • count: 有大约287万7305个数据点。
    • mean: 平均电力消耗大约为32.22千瓦时。
    • std: 标准差为50.36,表明数据分布有较大的变异性。
    • min: 最小电力消耗为-0.613千瓦时,这可能是一个异常值或数据错误。
    • 25%50%75%: 分别为13.32 kWh, 22.35 kWh, 34.44 kWh,显示了电力消耗的中位数和四分位数。
    • max: 最大电力消耗为1191.68 kWh,这可能也是一个异常值。
  2. 相关性矩阵

    • dttype之间的相关系数为-0.00848,非常接近于0,表明这两个变量几乎不相关。
    • typetarget之间的相关系数为0.44203,表明这两个变量之间存在中等程度的正相关性。
    • dttarget之间的相关系数为0.01877,表明这两个变量之间存在非常弱的正相关性。

此外我们对一些可能存在关联的数据之间绘制了一些统计学图像:

从这些图表中我们可以发现电力消耗与房屋类型大致呈线性关系;房屋类型值较大的房屋数量很少,房屋类型集中在1~7的类型区间内;用电曲线随着时间增大,呈现一定的周期性;房屋类型对于用电量影响非常大。这些数据对于模型选择提供了一定的参考。

探索性特征工程

数据清洗

        在原文档中,直接构建了历史平移特征和窗口统计特征,这存在一定的风险,因为:数据分析过程中,我们发现有一些房屋的用电量为负值,这显然是异常值,会对特征工程的构建产生负面影响。因此我们采取插值法,用平均值去代替这些异常值。

import pandas as pd

# 计算每种房屋类型的target均值
type_means = df.groupby('type')['target'].mean()

# 遍历DataFrame,替换target中的负值为对应类型的均值
for index, row in df.iterrows():
    if row['target'] < 0:
        df.at[index, 'target'] = type_means[row['type']]

# 显示结果
print(df)

特征编码

        数据中的type已经为整数类型,在这里不再做处理。

特征工程构建

        

历史平移特征(Historical Shift Feature)

历史平移特征是一种基于过去观察值的特征,通常用于捕捉时间序列中的长期趋势或季节性模式。这种特征的创建方法如下:

  • 平移:将时间序列的当前值与其历史值进行比较,比如,你可以将当前值与前一时间点的值、前一周的值或前一个月的值进行比较。
  • 特征类型:可以创建多种类型的平移特征,例如:
    • 滞后特征:当前值与前n个时间单位的值。
    • 变化率:当前值与前一时间单位的值的差分或百分比变化。
    • 累积和:从当前时间点向前累积的总和。
    • 移动平均:当前值相对于过去一段时间内的平均值。

历史平移特征有助于模型识别和学习时间序列中的长期依赖关系。

窗口统计特征(Window Statistics Feature)

窗口统计特征是基于时间窗口内的数据点来计算的统计量,用于捕捉时间序列中的局部模式或短期动态。这种特征的创建方法如下:

  • 窗口选择:定义一个时间窗口,这个窗口可以是固定的,也可以是滑动的。
  • 统计量计算:在选定的窗口内计算各种统计量,例如:
    • 平均值:窗口内所有数据点的平均值。
    • 中位数:窗口内所有数据点的中位数。
    • 最大值/最小值:窗口内数据点的最大值或最小值。
    • 标准差:窗口内数据点的标准差,反映波动性。
    • 方差:窗口内数据点的方差。
    • 偏度:窗口内数据点分布的偏斜程度。
    • 峰度:窗口内数据点分布的尖锐程度。

窗口统计特征有助于模型捕捉时间序列中的局部波动和异常值。

应用场景
  • 历史平移特征:适用于需要理解长期趋势和季节性影响的场景,如股票价格预测、销售预测等。
  • 窗口统计特征:适用于需要快速响应短期变化的场景,如实时监控系统、短期需求预测等。

 综合前面的数据分析,我认为历史平移特征是一种更佳的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值