モデル構築プロセスがインタラクティブだった場合のバックテストまたは相互検証


9

パフォーマンスをバックテストしたい予測モデルがいくつかあります(つまり、データセットを取得し、それを前の時点に「巻き戻し」、モデルがどのように予測的に実行されたかを確認します)。

問題は、私のモデルの一部がインタラクティブなプロセスを介して構築されたことです。たとえば、フランクハレルの回帰モデリング戦略のアドバイスに従って、1つのモデルで制限された3次スプラインを使用して、機能と応答の間の可能な非線形の関連付けを処理しました。ドメインの知識と関連の強さの一変量の測定値の組み合わせに基づいて、各スプラインの自由度を割り当てました。しかし、モデルに許可したい自由度は、データセットのサイズに明らかに依存します。これは、バックテスト時に大幅に変化します。モデルがバックテストされるたびに自由度を個別に選択したくない場合、他のオプションは何ですか?

別の例として、私は現在、高いレバレッジでポイントを見つけることによる外れ値の検出に取り組んでいます。手作業でこれを実行できた場合は、レバレッジの高い各データポイントを確認し、データがクリーンであることをサニティチェックして、フィルターで取り除くか、手動でクリーンアップします。しかし、これは一連のドメイン知識に依存しているため、プロセスを自動化する方法がわかりません。

(a)モデル作成プロセスのインタラクティブな部分を自動化する一般的な問題に対するアドバイスと解決策、または(b)これら2つのケースに対する特定のアドバイスの両方をいただければ幸いです。ありがとう!

回答:


4

ちなみに、これはSE.DataScienceに適しているかもしれませんが、とりあえずここでは答えます。

ソリューションを実装するスクリプトを書く以外に選択肢がない状況にいるようです。スプラインで作業したことがないので、私のスプラインに関する知識は厳密に理論的なものであるため、ご容赦ください。また、表示されていないものがある場合はお知らせください。

大まかに言えば、これを実装するために解決する必要があるいくつかの異なる項目があるようです。

1.)動的な方法でモデルパラメータを決定する。ドメインの知識と単変量の測定値の組み合わせを使用したと以前に述べました。これは、ヒューリスティックに処理できるように思えます。プログラムで実装する一連のルールについて、最初に同意する必要があります。これらのルールの潜在的な影響についていくつかのハードな思考を行う必要があるため、これは簡単なタスクかもしれません。これには、プロセスのすべてのステップを再検討し、決定だけでなく、それらの決定の背後にある理由もカタログ化する必要がある場合があります。

2.)実際にプログラムを実装する。今後、パフォーマンステストを適切に動的にし、保守と変更を容易にするためには、それをどのように構成するかについて考える必要があります。メインモデルの予測パフォーマンスの見積もりには、ある種のループを使用することをお勧めします。できれば、将来の柔軟性を高めるために、ユーザー定義可能な長さを使用することをお勧めします。また、プログラムで実行するアクションごとに個別の関数を作成することもできます。これにより、機能のテストが容易になり、プログラムの保守と変更が容易になります。少なくとも、データセットの選択(つまり、バックテストの時点で「過ぎた」期間のみ)、クリーニング、および検証(実際に考慮する必要がある)の機能が必要になる可能性があります。

外れ値の検出と処理に関するあなたの質問も、これら2つの懸念に該当します。私は、メインプログラムループ内に小さなループを作成して実装を開始します。それ(繰り返しますが、自分で定義する必要があります)。

これが大きな仕事のように聞こえるなら、それはそれが理由です。この種のタスクを実行するために、人々はソフトウェアライブラリ全体を(時には非常に有利に)作成しました。それを超えて、プロセス、データ構造、これまでに作業を行ったプログラミング言語についての知識がなければ、より具体的なアドバイスを提供することは困難です。

これがあなたにとって便利なものであり、あなたが私にそれを拡張して欲しいと思ったら、コメントして私に知らせてください。そうすれば私はそうするのがうれしいです。


実際にコードを書く手助けは必要ありません。おかげで、バックテストインフラストラクチャは既に整っており、非常に強力です。私は、どの統計手順を使用するのか興味があるだけです。モデル構築のインタラクティブな部分をヒューリスティックに自動化することに関して、これについて何か書かれたことがありますか?私はこの種のプロセスについての言及を文学で見たことがありません。「人々はソフトウェアライブラリ全体を書いた」とおっしゃっていますが、参考資料はありますか?
Ben Kuhn

@BenKuhn-あなたのコメントに基づいて、私はあなたが抱えている正確な困難について少し不明確です。もう少し明確にしてください。自動モデル構築でのヒューリスティックの使用は非常に広まっています。私が今考えることができる最も基本的なアプリケーションは、控えめな段階的回帰です。モデルの正確な詳細が不足しているので、参考になる正確な資料を指摘することはできませんが、大まかなGoogle検索では、特にパラメーターの平滑化とペナルティを課したスプラインの自動パラメーター選択の方法を探るいくつかの記事が表示されます。いくつかのリンクについては、次のコメントを参照してください
habu


@BenKuhn-あなたが使用するかもしれない統計的手順を言うとき、具体的にどういう意味ですか?私の考えでは、バックテストは、データ選択のローリングウィンドウまたは拡張ウィンドウのいずれかでトレーニングテストサンプリングを使用することにより、かなり簡単に処理できます。バックテストの時点までに取得したすべてのデータはトレーニングセットであり、モデルを再調整する機会が得られる前の次の期間に予想されるデータはテストセットです。予測性能と適合度の通常の測定はすべて、実際の評価を実行するために使用できます。
ハブ

@BenKuhn-実際のビジネス知識部分を実装するには、それを体系化し、そのような決定に必要なデータが必要なときに利用できることを確認する必要があります。また、「ソフトウェアライブラリ」という用語は、拡張機能から、特定のアプリケーションのモデル構築を自動化することを目的とした既存のモデリングライブラリから、工業用グレードのプロプライエタリのエキスパートや意思決定支援システムまで、すべてを網羅する包括的な用語として使用します。
ハブ

3

手動のモデル調整作業を自動化する方法を理解しようとするのではなく、モデルバイアスの増加を犠牲にしても、はるかに少ない調整を​​必要とする低分散学習者を調査することで、この問題をすべて回避します。バックテストの結果に自信があり、これは主に予測のサンプリング変動が低いことに帰着します。すでにサンプリング変動自体がある学習者の上にいくつかの自動チューニングプロセスを導入することは、その目標に反しています。尾が犬をここで振っているように見えるかもしれませんが、多くの注意深い調整(手動または自動)を必要とするものは、本当に正直なバックテスト環境IMOにはあまり適していません。


自動チューニング(バックテストの各時点で個別に実行されるチューニング)が「本当に正直なバックテスト環境」にならないのはなぜですか?
Ben Kuhn

スプラインを削除して分散を減らすと、残念ながら予測力が許容できないほど低下します。低分散学習器の使用を提案したとき、それはあなたが考えていたものですか?そうでない場合、あなたは何を考えていましたか?
Ben Kuhn

@BenKuhn-バックテストがモデルのサンプル外予測力の本当に「正直な」テストになるかどうかについてのアンドリューの懸念を共有します。利用可能なデータセット全体。モデルを動的に再構築して「時計を巻き戻す」場合でも、それを行う方法はデータセット全体を参照することによって開発されているため、たとえモデルが適合している場合でも、モデルが適合しすぎるリスクがあります。利用可能なデータのサブセットで再トレーニングしました。
ハブ

1
明確に言うと、自動チューニングは、時刻での予測がより大きい時刻のデータに依存しないという意味で正直になります。@habuの要点として、バックテストのパフォーマンスに基づいてモデルを反復的に改善することから生じるサンプル内バイアスの削減できない量が常にあり、それを回避する方法は本当にわかりません(これはファイナンスアプリケーション)。私が言っていた点は、バックテストの結果に関する信頼区間は、予測子のサンプリング分散とそれに基づく調整プロセスに関連しているということです。ttt
アンドリュー、

1
ファイナンスのように騒々しいドメインでは、ヒストリーが少し異なって展開された場合(ただし、いくつかの基礎となるディストリビューションから引き出された場合)、同様のモデルに到達することを確認する必要があります。あなたのプロセスがサンプリング分散に対して頑健であると確信している場合は、私があなたが良いと思うよりも。しかし、私の経験では、自動化されたチューニング手順はサンプリングの変動に非常に敏感です。
アンドリュー、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.