大規模な統計分析を実行するには、どのようなスキルが必要ですか?


107

多くの統計業務では、大規模データの経験が求められます。大規模なデータセットを操作するために必要な統計および計算スキルの種類は何ですか。たとえば、1,000万サンプルのデータセットが与えられた場合に回帰モデルを構築するのはどうでしょうか。


1
ここにいくつかの良いポインタ。
ラデック

あなたが最高だと思うものを要約すると役立つでしょう。
rolando2

興味深いのは、大量のデータセットを使用した仮説テストの関連する議論です:stats.stackexchange.com/q/2516/919
whuber

回答:


115

良い答えがすでに出ています。したがって、個人的な経験に基づいていくつかの考えを共有します。必要に応じて、関連する考えを自分の状況に合わせて調整します。

以下のための背景や文脈-したがって、このメッセージに忍び寄る可能性のある個人的な偏見を説明することができます-私の仕事の多くは、比較的小さなデータセットに基づいて重要な意思決定を支援することにあります。データの収集に費用がかかる可能性があるため、それらは小さいです(たとえば、地下水モニタリング井戸の最初のサンプルでは1万ドル、珍しい化学物質の分析では数千ドル)。私は、利用可能なデータから可能な限り多くを取得し、それらを死に至らしめ、必要に応じて分析するための新しい方法を発明することに慣れています。しかし、ここ数年、国勢調査のブロックレベルで全米をカバーする社会経済データや工学データ(850万件のレコード、

非常に大きなデータセットでは、アプローチ全体と考え方が変わります。現在、分析するデータが多すぎます。(回帰モデルに重点を置いた)直接的な(そして振り返って)明白な影響のいくつかは以下を含みます:

  • 実行することを考える分析は、多くの時間と計算を要する可能性があります。データセット全体を計算する際のワークフローを計画できるように、サブサンプリングと部分的なデータセットの操作方法開発する必要があります。(データセット全体と同じくらい豊富なデータの代表的なサブセットが必要なため、サブサンプリングは複雑になる可能性があります。また、保持されたデータでモデルを相互検証することを忘れないでください。)

    • このため、実行内容を文書化し、すべてをスクリプト化するのにより多くの時間費やすことになります(繰り返しができるように)。

    • @dsimchaが指摘したように、優れたプログラミングスキルは役に立ちます。実際には、プログラミング環境での経験ではあまり必要ありませんが、プログラミングへの意欲、プログラミングが役立つことを認識する能力(実際にはほぼすべてのステップで)、および基本的な要素の十分な理解が必要です適切なデータ構造の設計や、アルゴリズムの計算の複雑さを分析する方法などのコンピューターサイエンス。これは、記述する予定のコードが完全なデータセットにスケールアップするかどうかを事前に知るのに役立ちます。

    • 多くの変数(数千または数万、すべてが異なる)を持っているため、一部のデータセットは大きくなります。 データを要約して理解するだけで多くの時間を費やすことを期待してくださいブックまたはデータ辞書、および他の形式のメタデータは、必要不可欠になります。

  • あなたの時間の大部分は、単にデータを移動して再フォーマットすることに費やされています。大規模なデータベースを処理するスキルと、大量のデータを要約してグラフ化するスキルが必要です。(TufteのSmall Multipleがここで前面に出てきます。)

  • お気に入りのソフトウェアツールの一部は失敗します。たとえば、スプレッドシートを忘れてください。多くのオープンソースおよびアカデミックソフトウェアは、大規模なデータセットを処理するだけではありません。処理が永遠にかかるか、ソフトウェアがクラッシュします。これを期待し、重要なタスクを達成するための複数の方法があることを確認してください。

  • 実行する統計テストのほとんどは非常に強力であるため、「重要な」効果を特定するのはほぼ確実です。 有意性よりも、効果の大きさなどの統計的重要性もっと集中する必要があります

  • 同様に、モデルの選択は面倒です。なぜなら、あなたが考えているほとんどすべての変数と相互作用が重要に見えるからです。 分析することを選択した変数有意性にもっと集中する必要があります。

  • 変数の適切な非線形変換識別するのに十分な情報があります。これを行う方法を知っています。

  • 非線形関係、トレンドの変化、非定常性、不均一分散などを検出するのに十分なデータがあります

  • あなたは決して終わらないでしょう。永遠にそれらを研究することができる非常に多くのデータがあります。したがって、最初に分析目標を設定し、常にそれらを念頭に置くことが重要です。

最後に、小さなデータセットと大きなデータセットを使用した回帰モデリングの予想外の違いを示す短い逸話で終わります。国勢調査データを使用したプロジェクトの最後に、私が開発した回帰モデルをクライアントのコンピューティングシステムに実装する必要がありました。これは、リレーショナルデータベースにSQLコードを記述することを意味しました。これは日常的な手順ですが、データベースプログラマが生成したコードには数千行のSQLが含まれていました。これにより、バグがないことを保証することはほぼ不可能になりました-バグを検出することはできましたが(テストデータで異なる結果が得られました)、それらを見つけることは別の問題でした。(必要なのは、係数内の1つの誤植だけです...)ソリューションの一部は、モデル推定から直接SQLコマンドを生成するプログラム書くことでした。これにより、統計パッケージから出力されたものが、RDBMSに入力されたものとまったく同じであることが保証されました。ボーナスとして、このスクリプトの作成に数時間を費やしたことで、おそらく数週間のSQLコーディングとテストが置き換えられました。これは、統計学者が結果を伝えることができることの意味のほんの一部です。


3
+1、この素晴らしい回答を共有します(そして、印刷して近くにある^ _ ^)
Dmitrij Celov

1
+1、これは私が生徒たちに今後何年も語り直します。
mpiktas

2
逸話は、EviewsからRにモデルを転送しなければならなかった時間を思い出させました。元のモデルはEviewsで行われ、結果は約20の方程式でした。インタラクティブなインターフェースを備えたウェブページで結果を提示する必要がありました。モデルは進行中だったので、EviewsとRの両方で正確なモデルが使用されたのと同じ目的で、Eviewsの出力をRコードに変換するコードを作成しました。Rは非常にうまく機能し、翻訳されたコードの差分を使用することになりました分析勾配の計算用。
mpiktas

2
一般的に、ダウン投票がコメントで正当化された場合、そうしない特別な理由がない限り、より建設的であると見なされます(たとえば、1行のあいまいな応答、間違った回答の更新に対する応答がない、攻撃的な行動)。これは、有効な引数が作成されたときに、応答の品質を向上させるのに役立ちます。この特定のケースでは、ダウン投票の理由はありません!
CHL

2
自動化のための+1は、エラーを削減します:「モデル推定から直接SQLコマンドを生成するプログラムを作成します」。
オリオン14年

18

あなたの質問はいくつかの良い答えをもたらすはずです。ここにいくつかの出発点があります。

  1. 精度と計算能力に対する要求の間のトレードオフを処理する能力。

  2. 回帰を行う前の予備スクリーニングツールとして使用できるデータマイニング手法を備えた施設。たとえば、chaid、cart、またはニューラルネットワーク。

  3. 統計的有意性と実際的有意性との関係についての深い理解。変数選択の方法の幅広いレパートリー。

  4. 交差検証する本能。


また、#4と#1:を組み合わせます。コンピューティングリソースを圧倒することなく相互検証する方法を知ることが重要です。
ザック

1
2点目を教えてください。CHAID / CART / neuralネットワークを回帰のスクリーニングツールとしてどのように使用しますか?
-raegtin

2
@raegtin-私はCHAIDに最も精通しています。CHAIDは、いわゆる「相互作用」と呼ばれます。(CHAIDでは、そのように識別される主効果は1つしか存在しないため、他のすべての主効果は「相互作用」セルに絞り込まれます。)しかし、CHAIDには多くの相互作用をチェックできるという利点があります。そのため、いくつかの有望なものが特定されると、それらをすべての低次コンポーネントとともに回帰またはanovaに組み込むことができ、どれが本当に役立つかをテストできます。
rolando2

1
+1潜在的な影響を調べるためにデータマイニング(特にCHAID)を使用できる可能性に興味があります。そのように人工的な(そして小)のデータセットと同じように、アプリケーションを見るのは興味深いだろうstats.stackexchange.com/q/10363/919
whuberの

12

優れたプログラミングスキルは必須です。窒息することなく大量のデータを処理できる効率的なコードを作成できる必要があります。また、妥当な時間内に実行するためにコードを並列化できる必要があります。


4
コーディングは必須ですが、OSに反しないようにOSを操作する方法を知ることも重要です。ディスクとネットワークへのアクセスには追加のコストがかかるため、作業の分割には追加のコストがかかる場合があることを理解する必要があります。プロセス間通信をブロック、待機、実行するさまざまな方法を理解する必要があります。私は、ほとんどの時間をシステムコールの終了を待つ素晴らしい科学的コードを見てきました。システムのシステム管理者になり、コーヒーを持ち込むことでシステムの最適化に関する多くの助けを得ることができます;)
Marcin

2
「非効率的なコード」を書く方が、おそらく今後求められる追加の質問を予想するデータ構造の作成に役立つ場合があります。
ラルフ冬

1
@ラルフ:+1、私は絶対に同意し、自分でこれを苦労して学んだ。トレードオフに関係なく、常に効率的なコードを記述する必要があることを適用するつもりはありませんでした。
-dsimcha

5

また、大規模データには潜在的な「不良データ」の問題も生じることを付け加えます。データが欠落しているだけでなく、データに触れたシステムのすべての部分によって導入されたデータエラーと一貫性のない定義。したがって、統計スキルに加えて、他の誰かがあなたのためにそれをやっていない限り、あなたは専門のデータクリーナーになる必要があります。

-ラルフ・ウィンターズ


3
これらは良い点です。外れ値やその他のデータの問題はデータセットの規模に関係なくデータセットを悩ませます。私の経験では、大量のデータからそれらを区別する能力があるため、特に堅牢な方法を使用する場合、結果に影響を与える可能性は低いため、大規模なデータセットで実際に識別して処理するのは簡単です。ところで、すべての分析を通して常に「データクリーニング」を行っています。これは分離されて、スペシャリストに紹介されて、一度だけ処理されるものではありません。外れ値は、特定のモデルのコンテキストでの外れ値にすぎません。
whuber

2
手動編集の落とし穴を回避するのに役立つ半自動化されたデータクリーナーとして、Google Refineをチェックしてください。
mindless.panda

5
  1. Map-reduceフレームワークで問題をフレーミングします。
  2. 問題のエンジニアリング側、たとえば、パラメーターの精度を低くするとどれだけ傷つくか、または一般化だけでなくストレージおよび計算コストにも基づいたモデル選択。

言及したMap-reduceフレームワークの関連リンクを提供していただけますか?
mindless.panda

@ sugar.panda、wikiリンクが追加されました!
highBandWidth

精度の低下について言及する場合は+1ですが、それは決して魅力的な特権ではありません。精度が低いほど、悪い判断を下す可能性が高くなります。これはタイプI / IIのエラーと密接に関連しており、いくつかの分野にまたがっていますが、統計、意思決定科学、経済学にほとんど関連しています。ユーティリティ関数は、適切な方法論を特定するために、事前に思考プロセスの一部として考えるべきです。
トーマスシュパイデル14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.