mixi engineer blog

*** 引っ越しました。最新の情報はこちら → https://medium.com/mixi-developers *** ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

おすすめマイミクシィ/コミュニティ

はじめまして。mixi開発部・運用グループでアプリケーションの運用を担当しているmikiokatoといいます。週に一日興味があることについて研究や開発ができるOneDayFree の制度を使って開発し、12月25日にリリースしたインディーズ機能「おすすめ マイミクシィ/コミュニティ」について書いてみたいと思います。

おすすめ マイミクシィ/コミュニティとは

マイミクシィやコミュニティのリンクを分析して、マイミクシィになる可能性の高い人や興味がありそうなコミュニティをおすすめします。膨大な情報の中から検索などでユーザーにいろいろと探してもらうよりも、データを分析して興味がありそうなものをシステムからおすすめする試みです。

実際の画面はこちらです

人によって精度は差があるので、結果がいい場合もよくない場合もありますが、マイミクシィやコミュニティの発見につながればと思います。では、どういった仕組みでおすすめしているかを説明していきます。

おすすめ マイミクシィ/コミュニティの仕組み

おすすめマイミクシィ

親しい人から招待を受けてミクシィに参加し、よく知っている人からマイミクシィになっていく場合が多いため、一般にマイミクシィの数が少ないほど、親しい関係だと考えられます。
マイミクシィの数によってポイントを加算して集計することで、おすすめマイミクシィの候補を決定しています。

つまり、下の図のように、マイミクシィBさんのマイミクシィの数が10人だったとすると、マイミクシィのマイミクシィDさん、Eさんのポイントにそれぞれ1/10が加算されます。基本的には、それをマイミクシィの数だけ集計してランキングをつけているというわけです。例では、Dさんよりポイントの高いEさんの方が親しいだろうと予測されます。

recommend

おすすめコミュニティ

おすすめマイミクシィと同様に、親しいユーザーを分析し、そのマイミクシィが参加しているコミュニティをおすすめします。
また、マイミクシィがよく参加しているコミュニティや、参加者の多いコミュニティもあわせておすすめしています。

こちらはおすすめマイミクシィの計算方法に加えて、マイミクシィがよく参加しているコミュニティという要素も取り入れていて、適度な割合になるように両方の要素のポイントを合計しています。

このように、分析に使っているデータはマイミクシィのリンクとコミュニティに参加しているかどうかのリンク情報だけで、プロフィールなどの文章的な情報は全く使っていませんが、文章的な解析をしなくてもある程度の精度を出すことができています。こういったリンク情報の解析の研究は、リンクマイニングと呼ばれる研究分野となっています。

システム的な仕組み

解析の考え方は上記のとおりですが、こういった単純なアルゴリズムでも、マイミクシィの多いユーザーの場合は、処理時間がかかったり、システムに負荷がかかってしまいます。ですので、バッチ処理で定期的に結果のみデータベースに格納するようにしています。

mixi はユーザ数が1000万人以上いるので、単純に直列的なバッチ処理を考えると、1人あたりの処理に0.5秒かかったとしても・・・

1000万人×0.5秒=500万秒=約58日

と、これくらいの日数がかかる計算になります。

実際には、おすすめマイミクシィ/コミュニティの場合はID別に並列処理が可能なので、複数のプロセスで処理したり、同じ内容のデータベースを複数用意したりして、72時間程度で初回の解析を完了することができました。その後はアクセスの有無やマイミクシィの数の変動等を基準にして再度解析することでデータを更新しています。

まとめ

新しくマイミクシィになったり、コミュニティに参加したという声も聞かれる一方、こういったような問題もあります。

  • マイミクシィじゃなくなったユーザーや退会したコミュニティが表示される
  • 興味がないマイミクシィやコミュニティが表示される
  • アクセスブロックしているユーザーが表示される
  • 今後は機能追加やアルゴリズムの改善などでこういった問題を対処していきたいと思います。