处理异常值
在本练习中,您将处理异常值——这些数据点与其余数据差异很大,因此需要与其他"看起来正常"的数据点区别对待。您将使用上一个练习的输出(随时间的百分比变化)来检测异常值。首先,您将编写一个函数,用整个时间序列的中位数替换异常数据点。
本练习是课程的一部分
Python 中的时间序列机器学习
练习说明
- 定义一个函数,接收一个输入序列并执行以下操作:
- 计算每个数据点与序列均值的距离的绝对值,然后为那些距离均值超过 3 倍标准差的数据点创建布尔掩码。
- 使用该布尔掩码将异常值替换为整个序列的中位数。
- 将此函数应用到您的数据上,并使用给定的代码可视化结果。
交互式实操练习
通过完成这段示例代码来试试这个练习。
def replace_outliers(series):
# Calculate the absolute difference of each timepoint from the series mean
absolute_differences_from_mean = np.abs(series - np.mean(series))
# Calculate a mask for the differences that are > 3 standard deviations from zero
this_mask = absolute_differences_from_mean > (np.____(series) * ____)
# Replace these values with the median accross the data
series[this_mask] = np.____(series)
return series
# Apply your preprocessing function to the timeseries and plot the results
prices_perc = prices_perc.____
prices_perc.loc["2014":"2015"].plot()
plt.show()