こんにちは、ハーバード大学4年生のレンゾ・ルチオーニです。この夏はedXでインターンとして素晴らしい時間を過ごしました。製品管理における客観的なアプローチの実現と促進に取り組んできました。夏のプロジェクトは、LMSと新設のアナリティクスチーム全体にわたる、いくつかの個別の改善で構成されていました。LMSが学生の進捗状況を表示する方法を改善するだけでなく、「プロセス」を正しく構築することにも重点が置かれていました。ここで言う「プロセス」とは、変更点を特定・検証し、実装し、その影響を定量化することを意味します。この「プロセス」の実現と促進こそが、私がこの夏に取り組んだすべての仕事の核となるものです。
edX で私たちが実践しているプロセスの概要をご紹介します。まず、問題を具体的に特定し、その修正によってどのような効果が期待できるかを検討します。収集した分析データを使用して、対処すべき問題を特定します。次に、潜在的な解決策についてブレインストーミングを行います。次のステップは検証です。変更を完全に実装する前に、検証を行う必要があります。変更の動機はさまざまですが、提案された変更によって問題が解決されることを確認する必要があります。検証にはさまざまな方法があります。社内で少数の人々に変更を見せたり、変更をテストするために参加させたユーザー グループに実行させたり、分割テストを実施したりするなどです。変更が効果的であることがわかれば、それを実装します。効果がない場合は、ステップ 1 に戻ります。変更を行った後、検証ステップで期待した効果が得られているかどうかを確認するために、運用環境での実際の影響を測定します。
識別と定量化の手順を支援するために、私の仕事は分析とデータ品質に重点を置きました。 セグメント.io Segment.ioはサードパーティのサービスで、各サービスと個別に連携することなく、分析データを任意の分析サービスに送信できます。Segment.ioをedXプラットフォームに統合し、ログに記録されるイベントを整理しました。現在、Segment.ioを使用して、ユーザーがコースウェアを操作する際の行動を追跡し、その情報を Google Analytics, Mixpanel, チャートビート.
プロセスの検証ステップを改善するため、柔軟で軽量な分割テスト手法を開発しました。A/Bテストとも呼ばれる分割テストは、ユーザーをグループに分け、各グループに表示される内容を制御し(グループごとに異なるものを表示)、各グループの行動をモニタリングして比較するものです。私たちは、分割テスト手法を柔軟にし、edXプラットフォーム全体に適用し、外観の変更から全く新しい機能まで、さまざまな変更に対応できるようにしたいと考えました。私が実装した分割テストフレームワークは、 ワッフルはDjangoの機能フリッパーです。Djangoで利用可能なオープンソースのA/Bテストフレームワークはいくつかありますが、私はその一つを使わないことにしました。なぜなら、その多くはDjango 1.4と互換性がなく、メンテナンスも終了しており、ドキュメントも不十分、あるいは全く存在しないからです。さらに、分割テストのプロセスを抽象化しようとした結果、これらのフレームワークは私たちの典型的なユースケースにはあまりにも硬直的すぎることがわかりました。その多くは、ユーザーのサインアップや購入を追跡するという明確な目的のために設計されています。WaffleをMixpanelと組み合わせて使用することで、より柔軟で軽量なアプローチを実現できます。
Waffleは、ユーザーに表示される内容を制御するための3つのツール、フラグ、スイッチ、サンプルを提供しています。私のフレームワークは、DjangoのビューとMakoテンプレートの機能を切り替えるために、Waffleのセッションベースのフラグを使用しています。フラグは分割テストに最適です。フラグは、すべてのユーザー、ユーザーグループ、または任意の割合のユーザーに割り当てることができます。データベースの「フラグ」モデルに適切な権限があれば、DevOpsを介さずにDjango管理サイトからフラグを作成、切り替え、削除できます。さらに、フラグへの変更はコードをプッシュすることなく即座に反映されます。私のフレームワークは、Segment.io API呼び出しにアクティブなフラグをリストする文字列を含むプロパティを追加することで、特定のユーザーに対してどのフラグがアクティブであるかを追跡します。この変更は、 セグメント io.htmlSegment.io はこの情報を Mixpanel に送信し、そこでデータを調査し、さまざまなユーザー グループの行動を比較できるようになります。
実際のプロセス例をご紹介します。edX のユーザーグループと話をしたところ、進捗状況を状況に応じて表示してほしいという要望が強いことがわかりました。これまで、学生はコースの進捗状況を視覚的に把握するのが困難でした。また、コースウェアの操作方法もほとんどサポートされていませんでした。現在、コースウェアのランディングページでは、学生が最後に学習した場所とそのコンポーネントへのリンクが表示されています。しかし、コースのアコーディオンには、学生が完了した内容、現在取り組んでいる内容、まだ開始していない内容は表示されません。さらに悪いことに、進捗状況タブはコースウェアから切り離されており、冗長すぎるため、学生にとってすぐに役立つページとは言えません。学生は、コースウェアのコンテキスト内で自分の進捗状況を確実に測定する方法がありません。
この問題に対処するため、生徒が取り組んでいる問題のタイトルのすぐ横に生徒のスコアをリアルタイムで表示しようとしました。この変更を行うために、 capa_module.py の三脚と ディスプレイ.コーヒースプリットテストは、今回の変更のように明確な成果が得られるものではなく、大規模でリスクの高い変更にのみ実施するようにしています。適切なレベルで検証を行いたいと考えているからです。そのため、今回の変更の検証では、社内で変更内容を確認しました。この機能の実装後、現在、定量的な検証を行っています。コースウェアから進捗状況ページへのトラフィックが8%減少したことが確認されており、このデータを基に今後の変更を検討していきます。
分析データを用いた意思決定や、新しい作業のスプリットテストのための新しいフレームワークの活用は始まったばかりですが、これらのツールによってより良い選択が可能になると確信しています。edXの目標の一つは、人々がオンライン学習を行う上で何が役立つかを明らかにすることです。より定量的なアプローチとスプリットテストを組み合わせることで、この目標達成に貢献できるでしょう。
![]()