BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Facebookがオンラインフィールド実験フレームワークPlanOutをオープンソース化

Facebookがオンラインフィールド実験フレームワークPlanOutをオープンソース化

原文(投稿日:2014/04/25)へのリンク

PlanOutはFacebookのオンラインフィールドの実験のためのフレームワークであり、"A/Bテスト"、ファクトリアルデザイン、より複雑な実験をサポートする。Facebookによれば、PlanOutはアプリケーションのコードから分離したかたちで検証用のデザインを実装でき、正確にデザインを記述できる。

PlanOutはGitHub上で公開されているPythonベースのフレームワークで実装されている。オンラインサービスを制御するパラメータにランダムの値を提供し、UIや代替の機能のために固定値を使う必要はない。PlanOutがパラメータの値を決めてくれる。

PlanOutのフレームワークは次を含む。

  • 拡張可能なPythonクラスで実験を定義する。これによって、ランダムの引数や自動的に大事なデータをロギングできる。
  • 複数の排他的な関係にある実験を管理する。
  • PlanOutインタプリンタの参照実装。実験の定義をシリアライズ、保存、実行できる。
  • PlanOutのドメイン定義言語をシリアライズしたPlanOutコードに変換するコンパイラ。

PlanOutのページにあるサンプルは下記の通り。

class MyExperiment(SimpleExperiment):
  def assign(self, params, userid):
    params.button_color = UniformChoice(choices=['#ff0000', '#00ff00'],
      unit=userid)
    params.button_text = UniformChoice(choices=['I voted', 'I am a voter'],
      unit=userid)

PlanOutの実験の目的はユニット、例えばユーザをサービスのパラメータにマップするかを記述することだ。上記の例では、ボタンの色とテキストをランダムに均一にユーザに表示される。

一度実験を定義すると、アプリケーションのコードから問い合わせができ、どの値を現在のユーザに表示させるべきかを特定できる。

my_exp = MyExperiment(userid=42)
color = my_exp.get('button_color')
text = my_exp.get('button_text')

フレームワークは値は正確にランダムになることを保証し、各ユニット(例えば、上記の例ならuserid)が常に同じパラメータ値にマップさせる。

PlanOutを使う利点は、実験のパラメータにアクセスさせたらすぐに、実験の分析に必要な関連するデータが自動的にログ出力されることだ。

PlanOutは複数の実験で同じパラメータを使たい場合にパラメータ名前空間で実現する。名前空間によって実験を順に実行することもできる。これはテストを反復的に実施するのに使える。また、サービスの同じ側面を複数のチームがテストする場合には、実験を並列で実行することも可能だ。

FacebookはPlanOutを使って毎日数千の実験をしているという。億単位のひとが実験に参加していることになる。一方で、同社はHackで記述した別の実装でも実験をしている。

オンラインフィールド実験はデザインの代替をテストする方法であり、意思決定者がユーザのサービスに対する反応を理解する手助けをする。

また、InfoQの"A/Bテスト"のセクションには、オンラインフィールド実験に対するさまざまなコンテンツを用意している。

この記事に星をつける

おすすめ度
スタイル

BT