8

同様の期間のデータセットがいくつかあります。その日の人物紹介で、期間は約1年。データは定期的に収集されたものではなく、かなりランダムです。5 つの異なる年から、毎年 15 ~ 30 のエントリがあります。

各年のデータから描いたグラフは、おおむね次のように グラフ なります。 matplotlib で作成したグラフ。形式のデータがありdatetime.datetime, intます。

理にかなった方法で、物事が将来どうなるかを予測することは可能ですか? 私の最初の考えは、以前のすべての発生から平均を数え、それがこれになると予測することでした. ただし、これは今年のデータを考慮していません (常に平均よりも高かった場合、推定値はおそらくわずかに高くなるはずです)。

データセットと統計に関する私の知識は限られているため、すべての洞察が役に立ちます。

私の目標は、最初にプロトタイプ ソリューションを作成し、自分のデータが私がやろうとしていることに十分かどうかを試し、(潜在的な) 検証の後、より洗練されたアプローチを試すことです。

編集: 残念ながら、受け取った回答を試す機会がありませんでした! その種のデータで十分かどうかはまだ興味がありますが、機会があれば覚えておきます. すべての回答に感謝します。

4

2 に答える 2

12

あなたの場合、データは急速に変化しており、新しいデータを即座に観察できます。Holt-winter指数平滑法を使用して、迅速な予測を実装できます。

方程式の更新:

ここに画像の説明を入力してください

m_tはあなたが持っているデータです。たとえば、各時間の人数ですtv_tは一次導関数、つまりのトレンドですmalphabetaは2つの減衰パラメータです。上にある変数tildeは予測値を示します。ウィキペディアのページでアルゴリズムの詳細を確認してください。

を使用pythonしているので、データを支援するためのサンプルコードをいくつか紹介します。ところで、私は以下のようにいくつかの合成データを使用します:

data_t = range(15)
data_y = [5,6,15,20,21,22,26,42,45,60,55,58,55,50,49]

上記data_tは、時刻0から始まる一連の連続データポイントです。data_yは、各プレゼンテーションで観察された一連の人数です。

データは以下のようになります(私はあなたのデータに近づけようとしました)。

ここに画像の説明を入力してください

アルゴリズムのコードは単純です。

def holt_alg(h, y_last, y_pred, T_pred, alpha, beta):
    pred_y_new = alpha * y_last + (1-alpha) * (y_pred + T_pred * h)
    pred_T_new = beta * (pred_y_new - y_pred)/h + (1-beta)*T_pred
    return (pred_y_new, pred_T_new)

def smoothing(t, y, alpha, beta):
    # initialization using the first two observations
    pred_y = y[1]
    pred_T = (y[1] - y[0])/(t[1]-t[0])
    y_hat = [y[0], y[1]]
    # next unit time point
    t.append(t[-1]+1)
    for i in range(2, len(t)):
        h = t[i] - t[i-1]
        pred_y, pred_T = holt_alg(h, y[i-1], pred_y, pred_T, alpha, beta)
        y_hat.append(pred_y)
    return y_hat 

では、予測子を呼び出して、観測値に対して予測結果をプロットしましょう。

import matplotlib.pyplot as plt
plt.plot(data_t, data_y, 'x-')
plt.hold(True)

pred_y = smoothing(data_t, data_y, alpha=.8, beta=.5)
plt.plot(data_t[:len(pred_y)], pred_y, 'rx-')
plt.show()

赤は各時点での予測結果を示しています。私は0.8に設定alphaしたので、最新の観測は次の予測に大きな影響を与えます。履歴データにもっと重みを付けたい場合は、パラメーターalphaとを試してみてくださいbeta。また、赤線の右端のデータポイントt=15は最後の予測であり、まだ観測されていないことに注意してください。

ところで、これは完全な予測にはほど遠いです。それはあなたがすぐに始めることができるものにすぎません。このアプローチの短所の1つは、観測値を取得できる必要があることです。そうしないと、予測がますますずれてしまいます(おそらく、これはすべてのリアルタイム予測に当てはまります)。それが役に立てば幸い。

ここに画像の説明を入力してください

于 2012-11-16T03:23:32.300 に答える
5

予測は難しいです。多項式外挿を試してみることもできますが、「既知の」領域から離れるにつれて推定ミスが大幅に増加します

別の可能な解決策は、機械学習アルゴリズムを使用しようとすることですが、それには大量のデータを収集する必要があります。

データから特徴を抽出します (特徴とは、たとえば 1 日のエントリ数です)。そして、アルゴリズムをトレーニングします。(たとえば、遠い過去のデータに特徴を与え、現在を予測フィールドとして与えます)。

Pythonについてはわかりませんが、Javaには、機械学習に使用されるほとんどの機能とアルゴリズムを実装するwekaというオープンソースライブラリがあります。

後で相互検証を使用して、この方法の正確性を見積もることができます。


そうは言っても、この問題は通常、傾向検出と呼ばれ、現在研究が盛んな分野であるため、特効薬はありません

于 2012-08-07T11:39:58.950 に答える