プログラマでありたい

おっさんになっても、プログラマでありつづけたい

Statistics::Suggestを使って簡単にレコメンドエンジンを作る

 SUGGESTというリコメンドエンジンがあります。これは、Top-N方式というアルゴリズムで、アイテムベースとユーザベースからのリコメンドを行うことが出来ます。割と手軽に利用できるのですが、ライブラリ形式で提供されているため、スクリプト言語から使うにはちょっと手間です。そこで誰かが作ったのが、Statistics::SuggestというCPANモジュール。perlから手軽に扱えます。

 下記がサンプルのソースなのですが、ユーザIDとアイテムIDのペアデータを渡して学習させています。その上で、特定のアイテムに対するリコメンド商品を出しています。I/Fがシンプルなので非常に使いやすいです。実際に手持ちのデータで試してみても、それっぽい結果が出るのでもう少し遊んでみようかなと思っています。

  use Statistics::Suggest;
  
  ## initialize SUGGEST with $data
  my $data = [
    # array of [$user_id, $item_id], ...
    [1, 1], [1, 2], [1, 4], [1, 5],
    [2, 1], [2, 2], [2, 4],
    [3, 3], [3, 4],
    [4, 3], [4, 4], [4, 5],
  ];
  
  my $s = new Statistics::Suggest(
    RType => 2,
    NNbr => 40,
    Alpha => 0.3,
  );
  $s->load_trans($data);
  $s->init;

  ## make top 10 recommendations for $selected_item_ids
  my $rcmds;
  my $selected_item_ids = [1, 2];
  $s->top_n($selected_item_ids, 10, \$rcmds);
  
  print "recommendations: " . join(',', @$rcmds);

上のソースを実行すると、次のような結果が出ます。
つまりお勧めは4ということですね。

recommendations: 4