アプリケーションの例として、スタックオーバーフローユーザーの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
これは、対数スケールでのデータの外観です。
次に、あなたのソリューションが実際に私たちが新しい未知の風変わりなユーザーを発見するのに役立つかどうかを確認することは興味深いでしょう!
初期データは、次のように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を貼り付けました
- 長方形のすべての点を一度に選択します
そして最後に、注文の上位に表示される可能性が高いユーザーを以下に示します。
非常にビュー数が少なく情報プロファイルが低い非常に低い担当者ユーザー。
これらのユーザーは、どこかから何らかの方法でトラフィックをリダイレクトしている可能性があります。
関連:ユーザーによる有名な質問のゴールドバッジ操作のメタスレッドがありましたが、今は見つかりません。
そのようなユーザーが多すぎる場合、分析は困難になるため、そのような「詐欺」を回避するために他のパラメーターを検討する必要があります。
- A 1 143100 2445750 /programming//users/2445750/muhammad-mahtab-saleem
- D 60 51111 2139869 /programming//users/2139869/xxn
- E 40 23067 5740196 /programming//users/5740196/listcrawler
- F 11 7738 3313079 /programming//users/3313079/rikitikitaco
- G 136 11123 4102129 /programming//users/4102129/abhishek-deshpande
- K 377 24453 1012351 /programming//users/1012351/overstack
- L 1489 57515 1249338 /programming//users/1249338/frosty
- M 1767 40986 2578799 /programming//users/2578799/naresh-walia
- 私はこのユーザーのクラスターが興味深いと思います。すべてグラフの近くにあります。
- H 58 4331 1818755 /programming//users/1818755/eerongal
- I 103 4366 1816274 /programming//users/1816274/angelov
- J 157 4688 688552 /programming//users/688552/oylex
外部の名声:
- O 29799 170854 2274694 /programming//users/2274694/lyndsey-scottex Victoria's Secret model:https : //en.wikipedia.org/wiki/Lyndsey_Scott
- P 45742 454747 1 /programming//users/1/jeff-atwood SO共同創設者
- Y 29230 75102 4 /programming//users/4/joel-spolsky SO co-founder
- 評判が最も高いユーザーは、「評判が高いユーザー」のGoogleクエリ/リスティングに表示されるため、プロフィールビューが増える傾向があります。
- U 542861 401220 88656 /programming//users/88656/eric-lippert C#デザインに関与
- V 852319 396830 157882 /programming//users/157882/baluscトップ#2ユーザー、非常識な答えの量
風変わりなプロファイル:
- N 13690 108073 63550 /programming//users/63550/peter-mortensenその独自の写真!以前彼はモデレーターだったとも思います。
- R 143904 144287 895245 /programming//users/895245/ciro-santilli-%e6%96%b0%e7%96%86%e6%94%b9%e9%80%a0%e4%b8%ad %e5%bf%83996icu%e5%85%ad%e5%9b%9b%e4%ba%8b%e4%bb%b6
- T 291742 161929 560648 /programming//users/560648/lightness-races-in-orbit
その時点で一時停止されていた高担当ユーザー。ああ、愚かなあなたの担当者は1つのルールに行きます:
- B 1 77456 285587 /programming//users/285587/your-common-sense
わからない、私はビュー操作を言いたくなります:
- Q 65788 126085 50776 /programming//users/50776/casperone
- S 15655 81541 293594 /programming//users/293594/xnx
- W 12019 37047 2227834 /programming//users/2227834/unheilig
- X 1421 27963 1255427 /programming//users/1255427/jack-nicholson
可能な解決策
ウィルソンスコアの信頼区間についてhttps://www.evanmiller.org/how-not-to-sort-by-average-rating.htmlから聞いたことがあります。これは、肯定的な評価と不確実性の比率のバランスをとっています。観測数は少ないですが、それをこの問題にマッピングする方法がわかりません。
そのブログ投稿では、著者はそのアルゴリズムを推奨して、反対票よりも賛成票が多いアイテムを見つけることを推奨していますが、同じ考えが賛成票/縦断ビューの問題に当てはまるかどうかはわかりません。私は取ることを考えていました:
- プロフィールビュー==賛成投票
- ここに賛成==反対に賛成(両方とも「悪い」)
しかし、アップ/ダウン投票の問題で、並べ替えられている各アイテムにはN 0/1の投票イベントがあるため、それが意味があるかどうかはわかりません。しかし、私の問題では、各項目に2つのイベントが関連付けられています。賛成票の取得とプロフィールビューの取得です。
この種の問題に良い結果をもたらす有名なアルゴリズムはありますか?問題の正確な名前を知っていても、既存の文献を見つけるのに役立ちます。
参考文献
- https://meta.stackoverflow.com/questions/307117/are-profile-views-on-stack-overflow-positively-correlated-to-the-level-of-reputa
- 2変量外れ値の検定
- /programming/41462073/multivariate-outlier-detection-using-r-with-probability
- 外れ値を検出する簡単な方法はありますか?
- 線形回帰分析で異常値をどのように処理する必要がありますか?
- https://math.meta.stackexchange.com/questions/26137/who-maximizes-the-ratio-of-people-reached-to-questions-answered
Ubuntu 18.10、VisIt 2.13.3でテスト済み。