データ分析をデバッグする方法は?


10

私は偵察がかなり典型的であるという次の問題に遭遇しました。

数百万行という大きなデータがあります。たとえば、いくつかのサブクエリで構成されるSQLクエリなど、重要な分析をいくつか実行します。たとえば、プロパティXが時間の経過とともに増加しているという結果が出ました。

これにつながる可能性のある2つの可能性があります。

  1. Xは確かに時間とともに増加しています
  2. 分析にバグがあります

2番目ではなく1番目が発生したことをテストするにはどうすればよいですか?中間結果は何百万行にも及ぶ可能性があるため、ステップワイズデバッガーが存在しても、役に立ちません。

私が考え得る唯一のことは、テストしたいプロパティを持つ小さな合成データセットを何らかの方法で生成し、ユニットテストとして分析を実行することでした。これを行うためのツールはありますか?特に、SQLに限定されません。


すばらしい質問です。これは重要で重要な問題だと思います。
Ben

回答:


4

ここに提案があります:

  • サブサンプルで実行できるように分析をコーディングします。
  • ランダムに、時間ごとに、または地域ごとにサンプリングできる補足ルーチンをコーディングします。これはドメイン固有の場合があります。これはあなたの知識が入るところです。
  • 2つを組み合わせて、サブサンプル全体で結果が安定しているかどうかを確認します。

それは、私のバグがサブサンプル間で安定していることも意味しませんか?
リトルボビーテーブル

これは考えられる結果ですが、一度試してみないとわかりません。そうであれば、少なくともより小さなデータセットでデバッグできます。
Dirk Eddelbuettel 2014年

1

これは私が通常行うことです-最も重要な変数を取り(ビジネスの理解と仮説に基づく-後でいつでも修正できます)、これらの属性でグループ化して行の数を減らし、ピボットにインポートできます。各行に関連するメトリックの合計と数を含める必要があります。

前のステップでフィルターを配置しないようにしてください。要約されたレベルでデータ全体を取得したら、ピボットテーブルで遊んで、何が変化/増加または減少しているかを確認できます。

データが大きすぎて重要なパラメーターでも要約できない場合は、3から4のサブセットに分割してから、これを再度実行する必要があります。

それが役に立てば幸い。


1

最初に、アルゴリズムの実装が正確であることを確認する必要があります。そのためには、データの小さなサンプルを使用し、結果が正しいかどうかを確認します。この段階では、サンプルは母集団を表す必要はありません。

実装を検証したら、予測しようとする変数間に有意な関係があることを検証する必要があります。これを行うには、帰無仮説を定義し、有意な信頼水準で帰無仮説を棄却しようとします。(線形回帰の仮説検定

SQLディストリビューション用の単体テストフレームワークがある場合があります。しかし、Rのようなプログラミング言語を使用すると、実装がより簡単になります。


1

私は複数ステップの戦略が好きです:

  1. 短いトリッキーなコードとは対照的に、簡潔で理解しやすいコードを記述します。トリッキーなコードのような統計学者は知っていますが、トリッキーなコードで問題を見つけるのは危険です。(私のスーパーバイザーが文書化されていない500行のpython scripsが好きだったので、これについて言及しています-面倒なデバッグを楽しんでください。特に、ITのバックグラウンドを持っていない人から、そのパターンをたくさん見ました)

  2. コードをより小さな関数に分解します。より小さな関数でテストおよび評価できます。

  3. 接続された要素を探します。たとえば、条件Xのケースの数はYです-したがって、このクエリはYを返さなければなりません。ほとんどの場合、これはより複雑ですが、実行可能です。

  4. スクリプトを初めて実行するときは、小さなサブサンプルを使用してスクリプトをテストし、すべてが正常かどうかを注意深く確認します。私はITの単体テストが好きですが、統計スクリプトのバグは非常に目立つため、注意深くチェックすると簡単に見分けられます。または、それらはおそらくユニットテストでは決してキャッチされない系統的なエラーです。

これは、クリーンな「1回限りの」ジョブを保証するのに十分なはずです。しかし、あなたが持っていると思われる時系列の場合、範囲外の値、不可能な組み合わせなどを確認する必要があることを付け加えます。私にとって、ステップ4に達したほとんどのスクリプトにはおそらくバグがない-そして、それらはその方法でとどまらないでしょう何かが変わる。そしてほとんどの場合、データは変化しています-そしてそれは毎回の実行でチェックされるべきものです。そのためのコードを書くのは時間がかかり、煩わしいかもしれませんが、データ入力エラーによる微妙なエラーに勝ります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.