有必要在时间序列上建立机器学习模型来评估通信质量。
该数据集是在 14 天 (01/15/2016-01/28/2016) 内收集的,包含 7026706 行和 6 列:Dest。IP、最后一跳 IP、LQ、NLQ、成本。在这个数据集中,我为所有行添加了一个日期列并删除了 Dest 列。IP、最后一跳 IP、NLQ、成本。结果,我得到了踪迹。数据集。
接下来,我根据日期绘制了 LQ 值。
并对最后一次观测(24小时)进行了预测:0.9105833333333333
目前的代码:
import pandas as pd
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from glob import glob
from datetime import datetime, time
from pandas.plotting import autocorrelation_plot
from statsmodels.graphics.tsaplots import plot_acf
#Формирование датасета
files = glob("/content/newDataset/*.tsv")
dataset = pd.concat([pd.read_csv(f, sep="\t", skiprows=1) for f in files],
ignore_index=True)
n_samples = 7026706
dt_from = pd.to_datetime("2016-01-15 00:00:00.000000")
dt_to = pd.to_datetime("2016-01-28 23:59:59.999999")
dataset["DateTime"] = pd.date_range(dt_from, dt_to, periods=n_samples)
dataset['LQ'] = dataset.LQ.astype('float64')
#df = pd.DataFrame(dataset)
del dataset['Dest. IP']
del dataset['Last hop IP']
del dataset['NLQ']
del dataset['Cost']
#dataset.drop(['Dest. IP', 'Last hop IP', 'NLQ', 'Cost'], axis=1)
print(dataset)
#График
def plot_series(time, series, format="-", start=0, end=None, label=None):
plt.plot(time[start:end], series[start:end], format, label=label)
plt.xlabel("DateTime")
plt.ylabel("LQ")
if label:
plt.legend(fontsize=14)
plt.grid(True)
def trend(time, slope=0):
return slope * time
time = dataset['DateTime']
series = dataset['LQ']
plt.figure(figsize=(30, 6))
#plot_series(time, series)
#plt.show()
dataset.set_index("DateTime")["LQ"].rolling(window=600000).mean().plot()
#прогноз по последнему наблюдению
def moving_average(series, n):
return np.average(series[-n:])
moving_average(dataset.LQ, 24)
由于我的机器学习能力不强,那么:
- 我需要平滑时间序列吗?
- 什么模型可以用于这个任务?
- 我是否正确理解没有异常值并且该系列是固定的?
项目文件。




您的原始行具有非常具体的外观 - 下图中的一个片段。据此,沟通的质量可以通过不同的指标来评估。其中之一是期间平均值的变化。(例如 - 每秒、每分钟、每天)不清楚为什么要进行移动平均,如果对于指定的操作,您只需要在一段时间内进行平均。
必须检查由此获得的序列的平稳性,例如,通过 Dickey-Fuller 或 KPSS 检验。两者都在 statsmodels 包中。您的系列很可能是非固定的。
季节性的存在也不是由肉眼决定的,而是——例如——通过自相关分析。
接下来,您需要分析您的系列并做出预测。我会浏览经典列表(根据第 2 点和第 3 点的结果进行调整)- 局部回归、指数平均值、Holt、Holt-Winters、ARMA、ARIMA、SARIMA。
然后就可以进行分析了。
最后一个。我个人的看法——用一个单一的指标来评估沟通的质量——不是正确的方法。如果这是一项学习任务,那么它会做。如果是真正的监控 - 有必要对许多参数进行联合分析。此外,不仅可以从您的 LQ 中提取平均值,还可以提取附加参数——低于 1 的区间分布、单位区间长度的分布、段上的实数值分布等等. 所有这些都会影响通信质量,我不是在谈论您丢弃的其他参数。
正如在下一个答案中已经提到的- 您可以使用通常的方法而不是使用移动平均线
downsampling,即 例如,按 N 分钟对时间序列进行分组,然后取该组的平均值。这将大大减少您的样本量并加快模型训练。您的系列有明显的每日季节性迹象 - 请参见第二张图表。要谈论其他类型的季节性,您需要拥有更长时期的数据。对于或多或少合理的预测,您需要拥有至少一年的数据。
实际示例(使用FBProphet):
PS 如果时间序列将包含更多数据(例如,1 年以上),那么值得添加每周和每月的季节性以及有关假期的信息。