[[390133]] 予測区間は、回帰問題の予測における不確実性の尺度を提供します。 たとえば、95% の予測区間は、100 回のうち 95 回は、真の値が範囲の下限値と上限値の間に収まることを意味します。これは、不確実性区間の中心を表す可能性のある単純なポイント予測とは異なります。回帰予測モデリング問題におけるディープラーニングニューラルネットワークの予測区間を計算するための標準的な手法は存在しません。ただし、一連のモデルを使用して、大まかな予測間隔を推定することはできます。これにより、間隔を計算できるポイント予測の分布が提供されます。 このチュートリアルでは、ディープラーニング ニューラル ネットワークの予測区間を計算する方法を説明します。このチュートリアルを完了すると、次のことが分かります。 - 予測区間は、回帰予測モデリングの問題に対する不確実性の尺度を提供します。
- 標準的な回帰問題で単純な多層パーセプトロン ニューラル ネットワークを開発および評価する方法。
- ニューラル ネットワーク モデルのアンサンブルを使用して予測区間を計算し、報告する方法。
チュートリアルの概要このチュートリアルは、次の 3 つの部分に分かれています。 - 予測区間
- リカレントニューラルネットワーク
- ニューラルネットワーク予測間隔
予測区間通常、回帰問題(つまり、数値の予測)に使用される予測モデルは、ポイント予測を行います。つまり、単一の値を予測することはできますが、その予測の不確実性を示すものは提供できません。定義上、予測は推定値または近似値であり、ある程度の不確実性が含まれます。不確実性は、モデル自体のエラーと入力データのノイズから生じます。モデルは、入力変数と出力変数の関係を近似したものです。予測区間は、予測における不確実性を定量化したものです。結果変数の推定値の上限と下限の確率境界を提供します。 予測区間は、数量を予測する回帰モデルで予測や予想を行うときに最も一般的に使用される時間区間です。予測区間はモデルによって行われた予測を囲み、実際の結果の範囲をカバーすることが期待されます。予測区間全般の詳細については、チュートリアルを参照してください。 機械学習の予測区間: https://machinelearningmastery.com/prediction-intervals-for-machine-learning/ 予測区間について理解できたので、ニューラル ネットワークの区間を計算する方法について考えてみましょう。まず、回帰問題と、この問題を解決するためのニューラル ネットワーク モデルを定義します。 リカレントニューラルネットワークこのセクションでは、回帰予測モデリングの問題とそれを解決するためのニューラル ネットワーク モデルを定義します。まず、標準的な回帰データセットを紹介しましょう。住宅データセットを使用します。住宅データセットは、13 個の数値入力変数と 1 つの数値ターゲット変数を含む 506 行のデータで構成される標準的な機械学習データセットです。 3 回の反復による層別 10 分割交差検証を繰り返したテスト ハーネスを使用すると、単純なモデルで約 6.6 の平均絶対誤差 (MAE) を達成できます。最高性能のモデルは、同じテスト ハーネスで約 1.9 の MAE を達成します。これにより、このデータセットの予想されるパフォーマンスの上限が提供されます。このデータセットは、米国ボストン市の住宅郊外の詳細な情報に基づいて住宅価格を予測したものです。 住宅データセット (housing.csv): https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv 家の説明(家の名前): https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.names データセットをダウンロードする必要はありません。実例の一部として自動的にダウンロードされます。 次の例では、データセットを Pandas DataFrame としてダウンロードして読み込み、データセットの形状とデータの最初の 5 行の概要を示します。 - #負荷 住宅データセットを要約する
- pandasからread_csvをインポートする
- matplotlibからpyplotをインポートする
- #データセットをロード
- url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv'
- データフレーム = read_csv(url, ヘッダー=なし)
- # 形状を要約する
- 印刷(データフレーム.shape)
- #最初の数行を要約する
- 印刷(データフレーム.head())
例を実行すると、506 行のデータと 13 個の入力変数、および 1 つの数値ターゲット変数 (合計 14 個) が確認されます。また、すべての入力変数が数値であることもわかります。 - (506、14)
- 0 1 2 3 4 5 ... 8 9 10 11 12 13
- 0 0.00632 18.0 2.31 0 0.538 6.575 ... 1 296.0 15.3 396.90 4.98 24.0
- 1 0.02731 0.0 7.07 0 0.469 6.421 ... 2 242.0 17.8 396.90 9.14 21.6
- 2 0.02729 0.0 7.07 0 0.469 7.185 ... 2 242.0 17.8 392.83 4.03 34.7
- 3 0.03237 0.0 2.18 0 0.458 6.998 ... 3 222.0 18.7 394.63 2.94 33.4
- 4 0.06905 0.0 2.18 0 0.458 7.147 ... 3 222.0 18.7 396.90 5.33 36.2
-
- [5行×14列]
次に、モデリング用のデータセットを準備します。まず、データセットを入力列と出力列に分割し、次に行をトレーニング データセットとテスト データセットに分割します。この場合、行の約 67% を使用してモデルをトレーニングし、残りの 33% の行を使用してモデルのパフォーマンスを推定します。 - #入力に分割し、 出力 価値観
- x, y =値[:,:-1]、値[:,-1]
- #トレーニングセットとテストセットに分割
- X_train、X_test、y_train、y_test = train_test_split(X、y、train_size=0.67) です。
トレーニングとテストの分割の詳細については、次のチュートリアルを参照してください: 機械学習アルゴリズムを評価するためのトレーニングとテストの分割 次に、すべての入力列 (変数) を 0 ~ 1 の範囲にスケーリングします。これをデータ正規化と呼びます。これは、ニューラル ネットワーク モデルを操作するときに推奨される方法です。 - # 入力データのスケール
- スケーラー = MinMaxScaler()
- スケーラー.fit(X_train)
- X_train = スケーラー.transform(X_train)
- X_test = スケーラー.変換(X_test)
MinMaxScaler を使用して入力データを標準化する方法の詳細については、次のチュートリアルを参照してください: Python で StandardScaler および MinMaxScaler 変換を使用する方法: https://machinelearningmastery.com/standardscaler-and-minmaxscaler-transforms-in-python/ モデリング用のデータの準備の完全な例を以下に示します。 - #負荷 そして モデリングのためのデータセットを準備する
- pandasからread_csvをインポートする
- sklearn.model_selectionからtrain_test_split をインポートします
- sklearn.preprocessingからMinMaxScaler をインポートします
- #データセットをロード
- url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv'
- データフレーム = read_csv(url, ヘッダー=なし)
- 値=データフレーム.値
- #入力に分割し、 出力 価値観
- x, y =値[:,:-1]、値[:,-1]
- #トレーニングセットとテストセットに分割
- X_train、X_test、y_train、y_test = train_test_split(X、y、train_size=0.67) です。
- # 入力データのスケール
- スケーラー = MinMaxScaler()
- スケーラー.fit(X_train)
- X_train = スケーラー.transform(X_train)
- X_test = スケーラー.変換(X_test)
- # 要約
- 印刷(X_train.shape、X_test.shape、y_train.shape、y_test.shape)
例を実行すると、データセットが前と同じように読み込まれ、列が入力要素と出力要素に分割され、行がトレーニング セットとテスト セットに分割され、最後にすべての入力変数が [0,1] の範囲にスケーリングされます。トレーニング グラフとテスト セットの形状が印刷され、モデルのトレーニング用に 339 行、モデルの評価用に 167 行あることがわかります。 - (339、13) (167、13) (339、) (167、)
次に、データセット上で多層パーセプトロン (MLP) モデルを定義、トレーニング、評価します。 2 つの隠し層と数値を予測する出力層を持つ単純なモデルを定義します。 ReLU 活性化関数と「he」重み初期化を使用します。これは良い方法です。各隠し層のノード数は、試行錯誤の末に選択されました。 - # ニューラルネットワークモデルを定義する
- 特徴 = X_train.shape[1]
- モデル = シーケンシャル()
- モデルを追加します(Dense(20, kernel_initializer= 'he_normal' 、 activation= 'relu' 、 input_dim=features))
- モデルを追加します(Dense(5, kernel_initializer= 'he_normal' 、 activation= 'relu' ))
- モデル.add (密(1))
ほぼデフォルトの学習率と運動量値を持つ確率的勾配降下法の効率的な Adam バージョンを使用し、平均二乗誤差 (MSE) 損失関数 (回帰予測モデリング問題の標準) を使用してモデルを適合させます。 - # モデルをコンパイルし、損失とオプティマイザを指定します
- opt = Adam(学習率=0.01、ベータ1=0.85、ベータ2=0.999)
- model.compile(オプティマイザー=opt, 損失= 'mse' )
Adam 最適化アルゴリズムの詳細については、次のチュートリアルを参照してください。 《Adam 勾配降下法の最適化をゼロからコーディングする》 https://machinelearningmastery.com/adam-optimization-from-scratch/ その後、モデルは 16 サンプルのバッチ サイズで 300 エポックに適合されます。この構成は、試行錯誤の末に選択されました。 - #トレーニングデータセットにモデルを適合させる
- model.fit(X_train、y_train、詳細=2、エポック=300、バッチサイズ=16)
バッチとエポックの詳細については、次のチュートリアルを参照してください。 ニューラルネットワークにおけるバッチとエポックの違い https://machinelearningmastery.com/difference-between-a-batch-and-an-epoch/ 最後に、モデルを使用してテスト データセットで予測を行い、予測値とテスト セットの期待値を比較して予測を評価し、モデルのパフォーマンスを測る有用な指標である平均絶対誤差 (MAE) を計算できます。 - #テストセットで予測を行う
- yhat = model.predict(X_test, 詳細=0)
- #予測の平均誤差を計算する
- mae = 平均絶対誤差(y_test, yhat)
- print( 'MAE: %.3f' % mae)
完全な例は次のとおりです。 - #住宅回帰データセットで多層パーセプトロンニューラルネットワークをトレーニングして評価する
- pandasからread_csvをインポートする
- sklearn.model_selectionからtrain_test_split をインポートします
- sklearn.metricsからmean_absolute_errorをインポートします
- sklearn.preprocessingからMinMaxScaler をインポートします
- tensorflow.keras.modelsからSequential をインポートします
- tensorflow.keras.layersからDense をインポートします
- tensorflow.keras.optimizersからAdam をインポートします
- #データセットをロード
- url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv'
- データフレーム = read_csv(url, ヘッダー=なし)
- 値=データフレーム.値
- #入力に分割し、 出力 価値観
- x, y =値[:, :-1]、値[:,-1]
- #トレーニングセットとテストセットに分割
- X_train、X_test、y_train、y_test = train_test_split(X、y、train_size=0.67、random_state=1)
- # 入力データのスケール
- スケーラー = MinMaxScaler()
- スケーラー.fit(X_train)
- X_train = スケーラー.transform(X_train)
- X_test = スケーラー.変換(X_test)
- # ニューラルネットワークモデルを定義する
- 特徴 = X_train.shape[1]
- モデル = シーケンシャル()
- モデルを追加します(Dense(20, kernel_initializer= 'he_normal' 、 activation= 'relu' 、 input_dim=features))
- モデルを追加します(Dense(5, kernel_initializer= 'he_normal' 、 activation= 'relu' ))
- モデル.add (密(1))
- # モデルをコンパイルし、損失とオプティマイザを指定します
- opt = Adam(学習率=0.01、ベータ1=0.85、ベータ2=0.999)
- model.compile(オプティマイザー=opt, 損失= 'mse' )
- #トレーニングデータセットにモデルを適合させる
- model.fit(X_train、y_train、詳細=2、エポック=300、バッチサイズ=16)
- #テストセットで予測を行う
- yhat = model.predict(X_test, 詳細=0)
- #予測の平均誤差を計算する
- mae = 平均絶対誤差(y_test, yhat)
- print( 'MAE: %.3f' % mae)
例を実行すると、データセットが読み込まれて準備され、トレーニング データセットで MLP モデルが定義されて適合され、テスト セットでそのパフォーマンスが評価されます。 注意: アルゴリズムや評価手順の確率的特性、または数値精度の違いにより、結果が異なる場合があります。例を複数回実行し、平均結果を比較することを検討してください。 この場合、モデルは平均絶対誤差が約 2.3 を達成していることがわかります。これは、単純なモデルよりも優れており、最良のモデルに近い値です。 モデルをさらに調整することで最適なパフォーマンスに近づくことは間違いありませんが、予測区間の調査にはこれで十分です。 - エポック 296/300
- 22/22 - 0s - 負け: 7.1741
- エポック 297/300
- 22/22 - 0s - 負け: 6.8044
- エポック 298/300
- 22/22 - 0s - 負け: 6.8623
- エポック 299/300
- 22/22 - 0s - 負け: 7.7010
- エポック 300/300
- 22/22 - 0s - 負け: 6.5374
- 前払費用: 2.300
次に、住宅データセットで MLP モデルを使用して予測区間を計算する方法を見てみましょう。 ニューラルネットワーク予測間隔このセクションでは、前のセクションで開発した回帰問題とモデルを使用して予測区間を作成します。 予測区間の計算が簡単な線形回帰などの線形手法と比較すると、ニューラル ネットワークなどの非線形回帰アルゴリズムの予測区間の計算は困難です。標準的な技術はありません。ニューラル ネットワーク モデルの有効な予測区間を計算する方法は多数あります。さらに詳しく知るには、「さらに読む」セクションにリストされている論文のいくつかを読むことをお勧めします。 このチュートリアルでは、拡張の余地がたくさんある非常にシンプルなアプローチを使用します。これを「手っ取り早い」と呼ぶのは、計算が速くて簡単だが、一定の制限があるからです。複数の最終モデル(例:10 ~ 30)をフィッティングする必要があります。次に、アンサンブル メンバーからのポイント予測の分布を使用して、ポイント予測と予測間隔を計算します。 たとえば、ポイント予測をアンサンブル メンバーからのポイント予測の平均として取り、95% 予測区間をその平均からの 1.96 標準偏差としてとらえることができます。これは単純なガウス予測区間ですが、ポイント予測の最小値や最大値などの代替手段を使用することもできます。あるいは、ブートストラップ手法を使用して、各アンサンブル メンバーを異なるブートストラップ サンプルでトレーニングし、ポイント予測の 2.5 パーセンタイルおよび 97.5 パーセンタイルを予測区間として使用することもできます。 ブートストラップ方式の詳細については、チュートリアルを参照してください。 《ブートストラップ法の簡単な紹介》 https://machinelearningmastery.com/a-gentle-introduction-to-the-bootstrap-method/ これらの拡張は演習として残されており、ここでは単純なガウス予測区間に固執します。 前のセクションで定義したトレーニング データセットがデータセット全体であり、このデータセット全体で 1 つ以上の最終モデルをトレーニングしていると仮定します。その後、テスト セットの予測区間を使用して予測を行い、将来の区間の有効性を評価できます。 前のセクションで開発した要素を関数に分割することで、コードを簡素化できます。まず、URL で定義された回帰データセットを読み込んで準備する関数を定義しましょう。 - #負荷 そして データセットを準備する
- def load_dataset(url):
- データフレーム = read_csv(url, ヘッダー=なし)
- 値=データフレーム.値
- #入力に分割し、 出力 価値観
- x, y =値[:, :-1]、値[:,-1]
- #トレーニングセットとテストセットに分割
- X_train、X_test、y_train、y_test = train_test_split(X、y、train_size=0.67、random_state=1)
- # 入力データのスケール
- スケーラー = MinMaxScaler()
- スケーラー.fit(X_train)
- X_train = スケーラー.transform(X_train)
- X_test = スケーラー.変換(X_test)
- X_train、X_test、y_train、y_testを返す
次に、トレーニング データセットを指定して MLP モデルを定義およびトレーニングし、予測を行うのに適した適合モデルを返す関数を定義できます。 - #モデルを定義して適合する
- def fit_model(X_train, y_train):
- # ニューラルネットワークモデルを定義する
- 特徴 = X_train.shape[1]
- モデル = シーケンシャル()
- モデルを追加します(Dense(20, kernel_initializer= 'he_normal' 、 activation= 'relu' 、 input_dim=features))
- モデルを追加します(Dense(5, kernel_initializer= 'he_normal' 、 activation= 'relu' ))
- モデル.add (密(1))
- # モデルをコンパイルし、損失とオプティマイザを指定します
- opt = Adam(学習率=0.01、ベータ1=0.85、ベータ2=0.999)
- model.compile(オプティマイザー=opt, 損失= 'mse' )
- #トレーニングデータセットにモデルを適合させる
- model.fit(X_train、y_train、詳細=0、エポック=300、バッチサイズ=16)
- リターンモデル
ポイント予測には複数のモデルが必要であり、これらのモデルによって、間隔を推定できるポイント予測の分布が定義されます。 したがって、トレーニング データセットに複数のモデルを適合させる必要があります。異なる予測を行うには、各モデルが異なっている必要があります。これは、確率性、ランダムな初期重み、および確率的勾配降下法最適化アルゴリズムを使用して MLP モデルをトレーニングすることで実現されます。モデルの数が多いほど、モデルのパワーを推定するポイント予測の精度が高まります。少なくとも 10 個のモデルを推奨します。30 個を超えると、あまりメリットが得られないでしょう。以下の関数は、モデルのアンサンブルを適合させ、返されたリストに格納します。興味深いことに、各適合モデルはテスト セットでも評価され、各モデルの適合後に報告されます。保留されたテスト セットにおける各モデルの推定パフォーマンスは若干異なることが予想され、報告されたスコアはこの予想を確認するのに役立ちます。 - #モデルのアンサンブルを適合する
- fit_ensembleを定義します(n_members、X_train、X_test、y_train、y_test):
- アンサンブル = リスト()
- iが範囲内(n_members)の場合:
- #トレーニングセットにモデルを定義して適合させる
- モデル = fit_model(X_train, y_train)
- #テストセットでモデルを評価する
- yhat = model.predict(X_test, 詳細=0)
- mae = 平均絶対誤差(y_test, yhat)
- print( '>%d, MAE: %.3f' % (i+1, mae))
- # モデルを保存する
- ensemble.append(モデル)
- リターンアンサンブル
最後に、トレーニングされたモデルのアンサンブルを使用してポイント予測を行うことができます。これは予測区間として要約できます。 以下の関数はこれを実現します。まず、各モデルは入力データに対してポイント予測を行い、次に 95% 予測区間を計算して、区間の下限値、平均値、上限値を返します。 この関数は、1 行を入力として受け取るように設計されていますが、複数の行に簡単に適応できます。 - #アンサンブルで予測を行い、予測区間を計算する
- def predict_with_pi(アンサンブル, X):
- # 予測する
- yhat = [model.predict(X, verbose=0) アンサンブル内のモデルの場合]
- yhat = asarray(yhat)
- # 95% ガウス予測区間を計算する
- 間隔 = 1.96 * yhat.std()
- 下限、上限= yhat.mean() - 間隔、yhat.mean() + 間隔
- 戻る 下限、yhat.mean()、上限
最後に、これらの関数を呼び出すことができます。まず、データセットが読み込まれて準備され、次にアンサンブルが定義されてフィッティングされます。 - #データセットをロード
- url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv'
- X_train、X_test、y_train、y_test = load_dataset(url)
- # フィットアンサンブル
- n_メンバー = 30
- アンサンブル = fit_ensemble(n_members、X_train、X_test、y_train、y_test)
次に、テスト セットの行を使用して、予測間隔を使用して予測を行い、結果を報告できます。 また、予測区間でカバーされると予想される期待値も報告します (おそらく 95% に近い値ですが、完全に正確ではありませんが、おおよその近似値です)。 - #予測区間で予測する
- 新しいX = asarray([X_test[0, :]])
- 下限、平均、上限= predict_with_pi(ensemble, newX)
- print( 'ポイント予測: %.3f' % 平均)
- print( '95%% 予測区間: [%.3f, %.3f]' % (下限,上限))
- print( '真の値: %.3f' % y_test[0])
以上を踏まえて、ここでは多層パーセプトロン ニューラル ネットワークを使用した予測区間による予測の完全な例を示します。 - #住宅回帰データセットにおけるmlpsの予測区間
- NumPyからasarrayをインポート
- pandasからread_csvをインポートする
- sklearn.model_selectionからtrain_test_split をインポートします
- sklearn.metricsからmean_absolute_errorをインポートします
- sklearn.preprocessingからMinMaxScaler をインポートします
- tensorflow.keras.modelsからSequential をインポートします
- tensorflow.keras.layersからDense をインポートします
- tensorflow.keras.optimizersからAdam をインポートします
-
- #負荷 そして データセットを準備する
- def load_dataset(url):
- データフレーム = read_csv(url, ヘッダー=なし)
- 値=データフレーム.値
- #入力に分割し、 出力 価値観
- x, y =値[:, :-1]、値[:,-1]
- #トレーニングセットとテストセットに分割
- X_train、X_test、y_train、y_test = train_test_split(X、y、train_size=0.67、random_state=1)
- # 入力データのスケール
- スケーラー = MinMaxScaler()
- スケーラー.fit(X_train)
- X_train = スケーラー.transform(X_train)
- X_test = スケーラー.変換(X_test)
- X_train、X_test、y_train、y_testを返す
-
- #モデルを定義して適合する
- def fit_model(X_train, y_train):
- # ニューラルネットワークモデルを定義する
- 特徴 = X_train.shape[1]
- モデル = シーケンシャル()
- モデルを追加します(Dense(20, kernel_initializer= 'he_normal' 、 activation= 'relu' 、 input_dim=features))
- モデルを追加します(Dense(5, kernel_initializer= 'he_normal' 、 activation= 'relu' ))
- モデル.add (密(1))
- # モデルをコンパイルし、損失とオプティマイザを指定します
- opt = Adam(学習率=0.01、ベータ1=0.85、ベータ2=0.999)
- model.compile(オプティマイザー=opt, 損失= 'mse' )
- #トレーニングデータセットにモデルを適合させる
- model.fit(X_train、y_train、詳細=0、エポック=300、バッチサイズ=16)
- リターンモデル
-
- #モデルのアンサンブルを適合する
- fit_ensembleを定義します(n_members、X_train、X_test、y_train、y_test):
- アンサンブル = リスト()
- iが範囲内(n_members)の場合:
- #トレーニングセットにモデルを定義して適合させる
- モデル = fit_model(X_train, y_train)
- #テストセットでモデルを評価する
- yhat = model.predict(X_test, 詳細=0)
- mae = 平均絶対誤差(y_test, yhat)
- print( '>%d, MAE: %.3f' % (i+1, mae))
- # モデルを保存する
- ensemble.append(モデル)
- リターンアンサンブル
-
- #アンサンブルで予測を行い、予測区間を計算する
- def predict_with_pi(アンサンブル, X):
- # 予測する
- yhat = [model.predict(X, verbose=0) アンサンブル内のモデルの場合]
- yhat = asarray(yhat)
- # 95% ガウス予測区間を計算する
- 間隔 = 1.96 * yhat.std()
- 下限、上限= yhat.mean() - 間隔、yhat.mean() + 間隔
- 戻る 下限、yhat.mean()、上限
-
- #データセットをロード
- url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv'
- X_train、X_test、y_train、y_test = load_dataset(url)
- # フィットアンサンブル
- n_メンバー = 30
- アンサンブル = fit_ensemble(n_members、X_train、X_test、y_train、y_test)
- #予測区間で予測する
- 新しいX = asarray([X_test[0, :]])
- 下限、平均、上限= predict_with_pi(ensemble, newX)
- print( 'ポイント予測: %.3f' % 平均)
- print( '95%% 予測区間: [%.3f, %.3f]' % (下限,上限))
- print( '真の値: %.3f' % y_test[0])
例を実行すると、各アンサンブル メンバーが順番に適合され、保留されたテスト セットでの推定パフォーマンスが報告されます。最後に、予測区間による予測が作成され、予測されます。 注意: アルゴリズムや評価手順の確率的特性、または数値精度の違いにより、結果が異なる場合があります。例を複数回実行し、平均結果を比較することを検討してください。 この場合、各モデルのパフォーマンスがわずかに異なることがわかり、モデルが実際に異なるという予想が裏付けられます。 最後に、アンサンブルは95%予測区間[26.287, 34.822]で約30.5のポイント予測を行うことがわかります。また、真の値は 28.2 であり、間隔がこの値を捉えていることもわかります。これは非常に良好です。 - >1、MAE: 2.259
- >2、MAE: 2.144
- >3、MAE: 2.732
- >4、MAE: 2.628
- >5、MAE: 2.483
- >6、MAE: 2.551
- >7、MAE: 2.505
- >8、MAE: 2.299
- >9、MAE: 2.706
- >10、MAE: 2.145
- >11、MAE: 2.765
- >12、MAE: 3.244
- >13、MAE: 2.385
- >14、MAE: 2.592
- >15、MAE: 2.418
- >16、MAE: 2.493
- >17、MAE: 2.367
- >18、MAE: 2.569
- >19、MAE: 2.664
- >20、MAE: 2.233
- >21、MAE: 2.228
- >22、MAE: 2.646
- >23、MAE: 2.641
- >24、MAE: 2.492
- >25、MAE: 2.558
- >26、MAE: 2.416
- >27、MAE: 2.328
- >28、MAE: 2.383
- >29、MAE: 2.215
- >30、MAE: 2.408
- ポイント予想: 30.555
- 95%予測区間: [26.287, 34.822]
- 真の値: 28.200
真の値: 28.200 |