ポイントの2つの値の間に統計的に意味のある大きな外れ値の比率を持つサンプルポイントを見つける方法は?


12

アプリケーションの例として、スタックオーバーフローユーザーの2つのプロパティ、レピュテーションとプロファイルビュー数を検討してください。

ほとんどのユーザーにとって、これらの2つの値は比例することが予想されます。担当者が多いユーザーはより多くの注意を引き、したがってより多くのプロファイルビューを取得します。

したがって、全体的な評判と比較してプロファイルビューが多いユーザーを検索することは興味深いことです。

これは、そのユーザーに外部の名声があることを示している可能性があります。または、おそらく彼らが面白い風変わりなプロフィールの写真と名前を持っているだけかもしれません。

より数学的には、各2次元サンプルポイントはユーザーであり、各ユーザーは0から+無限大までの2つの整数値を持っています。

  • 評判
  • プロフィールビューの数

これらの2つのパラメーターは線形従属であると予想され、その仮定に対する最大の外れ値であるサンプルポイントを見つけたいと考えています。

もちろん、素朴な解決策は、単にプロファイルビューを取得し、評判で分割し、並べ替えることです。

ただし、これは統計的に意味のない結果をもたらします。たとえば、ユーザーが質問に回答し、1つの賛成票を得て、何らかの理由で10のプロフィールビューがあり、それが簡単に偽造された場合、そのユーザーは、1000の賛成票と5000のプロフィールビューを持つはるかに興味深い候補の前に表示されます。 。

より「現実的な」使用例では、たとえば「どのスタートアップが最も意味のあるユニコーンか?」と答えることができます。例:小さなエクイティで1ドルを投資する場合、ユニコーンを作成します。https://www.linkedin.com/feed/update/urn:li:activity:6362648516858310656

具体的なクリーンで使いやすい実世界のデータ

この問題の解決策をテストするには、2019-03のスタックオーバーフローデータダンプから抽出された次の小さな(75M圧縮、最大1,000万ユーザー)前処理ファイルを使用できます。

wget https://github.com/cirosantilli/media/raw/master/stack-overflow-data-dump/2019-03/users_rep_view.dat.7z
7z x users_rep_view.dat.7z

これは、UTF-8でエンコードされusers_rep_view.datた非常にシンプルなプレーンテキストスペース区切り形式のファイルを生成します。

Id Reputation Views DisplayName
-1 1 649 Community
1 45742 454747 Jeff_Atwood
2 3582 24787 Geoff_Dalgas
3 13591 24985 Jarrod_Dixon
4 29230 75102 Joel_Spolsky
5 39973 12147 Jon_Galloway
8 942 6661 Eggs_McLaren
9 15163 5215 Kevin_Dente
10 101 3862 Sneakers_O'Toole

これは、対数スケールでのデータの外観です。

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

gnuplotスクリプト

次に、あなたのソリューションが実際に私たちが新しい未知の風変わりなユーザーを発見するのに役立つかどうかを確認することは興味深いでしょう!

初期データは、次のように2019-03データダンプから取得されました。

wget https://archive.org/download/stackexchange/stackoverflow.com-Users.7z

# Produces Users.xml
7z x stackoverflow.com-Users.7z

# Preprocess data to minimize it.
./users_xml_to_rep_view_dat.py Users.xml > users_rep_view.dat
7z a users_rep_view.dat.7z users_rep_view.dat

sha256sum stackoverflow.com-Users.7z users_rep_view.dat.7z > checksums

のソースusers_xml_to_rep_view_dat.py

を並べ替えて外れ値を選択した後users_rep_view.dat、ハイパーリンクを含むHTMLリストを取得して、次の方法で上位の候補をすばやく表示できます。

./users_rep_view_dat_to_html.py users_rep_view.dat | head -n 1000 > users_rep_view.html
xdg-open users_rep_view.html

のソースusers_rep_view_dat_to_html.py

このスクリプトは、データをPythonに読み込む方法のクイックリファレンスとしても使用できます。

手動データ分析

すぐにgnuplotのグラフを見ると、期待どおりに次のことがわかります。

  • データはほぼ比例しており、担当者が少ない、または視聴回数が少ないユーザーの方が分散が大きい
  • 担当者が少ない、または視聴回数が少ないユーザーはより明確です。つまり、アカウントIDが高い、つまりアカウントが新しい

データに関する直感を得るために、インタラクティブなプロットソフトウェアで遠くまでポイントをドリルダウンしたいと思いました。

GnuplotとMatplotlibはこのような大きなデータセットを処理できなかったため、VisIt初めて試してみましたが、うまくいきました。これが私が試したすべてのプロットソフトウェアの詳細な概要です:https : //stackoverflow.com/questions/5854515/large-plot-20-million-samples-gigabytes-of-data/55967461#55967461

走りにくかったOMG。そうしなければならなかった:

  • 実行可能ファイルを手動でダウンロードします。Ubuntuパッケージはありません
  • users_xml_to_rep_view_dat.pyスペースで区切られたファイルをフィードする方法を簡単に見つけることができなかったため、すばやくハックアップしてデータをCSVに変換します(教訓、次回は直接CSVに進みます)。
  • UIで3時間戦う
    • デフォルトのポイントサイズはピクセルであり、画面上のゴミと混同されます。10ピクセルの球に移動
    • プロファイルビューが0のユーザーがいて、VisItは対数プロットの実行を正しく拒否したため、データ制限を使用してそのポイントを削除しました。これは私にgnuplotは非常に寛容であり、あなたが投げたものを喜んでプロットすることを思い出させました。
    • 軸のタイトルの追加、ユーザー名の削除など、[コントロール]> [注釈]

この手動作業に飽きた後のVisItウィンドウの外観は次のとおりです。

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

文字は、素晴らしいピック機能を使用して手動で選択したポイントです。

  • Picksウィンドウ> "Float Format"で浮動小数点の精度を上げると、各ポイントの正確なIDを確認できます。 %.10g
  • 次に、「ピックを別名で保存」を使用して、すべての手動で選択したポイントをtxtファイルにダンプできます。これにより、いくつかの基本的なテキスト処理を使用して、興味深いプロファイルURLのクリック可能なリストを作成できます。

TODO、次の方法を学ぶ:

  • プロファイル名の文字列を参照してください。デフォルトでは0に変換されます。ブラウザにプロファイルIDを貼り付けました
  • 長方形のすべての点を一度に選択します

そして最後に、注文の上位に表示される可能性が高いユーザーを以下に示します。

可能な解決策

ウィルソンスコアの信頼区間についてhttps://www.evanmiller.org/how-not-to-sort-by-average-rating.htmlから聞いたことがあります。これは、肯定的な評価と不確実性の比率のバランスをとっています。観測数は少ないですが、それをこの問題にマッピングする方法がわかりません。

そのブログ投稿では、著者はそのアルゴリズムを推奨して、反対票よりも賛成票が多いアイテムを見つけることを推奨していますが、同じ考えが賛成票/縦断ビューの問題に当てはまるかどうかはわかりません。私は取ることを考えていました:

  • プロフィールビュー==賛成投票
  • ここに賛成==反対に賛成(両方とも「悪い」)

しかし、アップ/ダウン投票の問題で、並べ替えられている各アイテムにはN 0/1の投票イベントがあるため、それが意味があるかどうかはわかりません。しかし、私の問題では、各項目に2つのイベントが関連付けられています。賛成票の取得とプロフィールビューの取得です。

この種の問題に良い結果をもたらす有名なアルゴリズムはありますか?問題の正確な名前を知っていても、既存の文献を見つけるのに役立ちます。

参考文献

Ubuntu 18.10、VisIt 2.13.3でテスト済み。


1
私はこれが初めてなので、用語/質問を編集して、用語をより正確にしてください。ありがとう。
Ciro Santilli冠状病毒审查六四事件法轮功

外れ値を検索しているようです。私はこのスペースでテクニックを使用します
確率論的

1
@probabilityislogicところで、具体的な使いやすいデータで質問を更新しました。
Ciro Santilli冠状病毒审查六四事件法轮功

1
これは興味深い質問であるだけでなく、非常に具体的で適切にフォーマットされているとも言えます。見上げる例。@Ciro、よくできました!
Julio Cezar Silva

1
@JulioCezarSilvaありがとう!! 今回は、高パフォーマンスのインタラクティブプロットについて学習することを期待していませんでしたが、学習しました。クラシック。
Ciro Santilli冠状病毒审查六四事件法轮功

回答:


4

Wilsonスコアの信頼区間は、問題に直接適用できると思います。ブログで使用されているスコアは、期待値ではなく信頼区間の下限でした。

そのような問題の別の方法は、たとえば全体的なビュー/レプ比など、私たちが持っているいくつかの事前知識に向かって私たちの推定を修正(バイアス)することです。

vN(μ,σ)μ

μp(μ)

μMAP=nμMLE+cμ0n+c
ncμMLEμ0


2つの方法(ウィルソンスコアの信頼区間の下限とMAP)を比較するために、どちらも十分なデータ(reps)がある場合に正確な推定を提供し、レップの数が少ない場合、ウィルソンの下限の方法はゼロに偏り、MAPは平均へのバイアス。


1
お返事をありがとうございます!質問を具体的で使いやすいデータで更新しました。誰かがなんとか楽しい調査結果を出せるかどうか見てみましょう。
Ciro Santilli冠状病毒审查六四事件法轮功

1
@CiroSantilli新疆改造中心996ICU六四事件いい仕事です!
dontloo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.