葉のない木

夢の結果



Facebookは、いわゆるaha-momentについての記事を公開しました。これは、ユーザーが登録後10日以内に7人の友人を追加した場合、このユーザーはサービスに留まると述べています。



なぜこの結果(aha-moment)がそんなに魅力的なのですか?

彼が:

a)シンプル

b)意味のある

c)アクション可能



そのような結果が生じた場合、サービスは最初の10日間に7人の友人を追加するようユーザーを動機付けるためにあらゆることを行うだけでよいため、より高い目標である「保持率の向上」に進みます。



繰り返しますか?







もちろん、どのサービスでもそのアハモーメントを見つけたいと考えています。 さらに、Facebookのようにシンプルであることが望まれます。そのため、すべてがシンプルで明確であり、アナリスト、潜在的な兆候などの抽象化が一切ありません。



Lingualeoで私たちは問題を解決しようとしました:Facebookから解決策を盗むのではなく、コンスタンティンテレシンが以下で議論する私たち自身のものを思い付くために



問題の声明



1つの予約を作成しましょう。aha-momentをFacebookの結果と同じくらいシンプルで理解しやすくし、特定のユーザーアクションに限定したかったのです。 これが結果の主な要件でした。



今、タスクに



どんな研究課題においても、最初にすべきことは概念を決定することです。 「ユーザーが残る」、「忠実になる」、「流れない」などの概念はどういう意味ですか。 ここでは、誰もが独自の真実を持っています。各サービスは独自の方法でこれを理解しています。 さて、私たちは忠誠心の独自の定義を導入しました。 この定義の詳細については説明しません。 ここで重要なのは、この機能をどのように使用したかです。 注意すべき唯一のことは、忠誠心は二項変数であり、値が0-ユーザーが忠誠心を持っていない場合、1-忠誠心になっている場合です。 これがターゲット変数です。



ターゲットのサインを決定したので、それはまだ形式化する必要があります。「アハモーメントを見つける」とはどういう意味ですか?



たとえば、ユーザーが忠誠心を持つ確率が最大になる変数と値を見つけます。

しかし、これはオプションではありません。「ナットを締める」ことができるためです。 ユーザーが言葉を練習(学習)すればするほど、忠実である可能性が高くなることは明らかです。 しかし、これは難しい結果です。



または、たとえば、連想ルールのロジックに従い、サポートによってソートされた次の形式のルールのリストを見つけることができます:変数値=>ロイヤルティイベント。

良いオプションですが、私たちと一緒にいる変数(それらについては後で)には多くの場合、値の範囲が広いため、イベントの辞書には何万もの位置が含まれます。 したがって、重要な結果は得られません。



その結果、次のロジックを決定しました。ユーザーがロイヤルになる確率の傾向の変化の境界を決定する変数とその値を見つけます。

例:

変数があるとします。 忠実になる確率は、次の分布になります。





グラフは、曲線の傾向が5〜6の値で変化していることを示しています。 その後、忠実になる確率は急速に高まっています。 つまり、そのような変数とその値を見つけなければなりません。そうすると、確率は可能な限り大きくなり始めます。



データについて少し



登録後の最初の2週間にaha-momentを決定することが重要でした(それぞれがビジネスの詳細に基づいて必要な期間を決定します)。 したがって、この期間を注意深く見て、分析のために約750個の変数を生成しました。 その中には、ユーザーが何をしたか、何回したか、何回したか、登録後の特定の日に何をしたかなどなどがあります。



そして、さらにいくつかのコメント:

Lingualeoモバイルアプリケーションのユーザーに対してのみ実施した分析

AndroidとiOSを別々に



要約すると:

Androidの場合、サンプル(ユーザー数240,862 x変数数751)を取得しました

IOSの場合、サンプル(ユーザー数73,712 x変数数751)を取得しました



問題を解決する方法



750個の変数を自分の手で調べて、それらから最良の同じ値を見つけることは明らかです-これは怠け者のためではありません。 したがって、私はこれをすべて自動化したかったのです。



タスクを2段階に分けました。

「重要な」変数の選択

「右」の境界線を検索します。



正しい境界線を見つけることから始めましょう。

機能1とターゲット機能があるとします。 トレンドの変化をキャッチするような方法でサンプルを理想的に分割する値を見つける方法は?

このタスクを考えると、1つの変数と1つの変数で決定木を構築するというアイデアが生まれました。

実際、意思決定ツリーのタスクは、システムの複雑さを最小限に抑えることです。 システム内のカオスのレベルが低下する変数の分割を選択し、カオスを評価するための明確な基準があります。 Entropyを使用しました。

私たちのケースのポイントは何ですか? ターゲット特性には2つのクラスしかないため(0-忠実ではない、1-忠実)、特性1(priznak_1)で深さ1の決定木を構築すると、1種類の分割(偽データ)が得られます。





結果として、境界は、分割の一方のクラス1の確率と他方のクラス0の確率との間で理想的なバランスが維持されるように選択されます。 正式には、最大の「情報利得」を得ました。



実際、これが必要な境界線です。



重要なコメント:最終的には、分類問題を解決できず、より粗いツリーを構築する必要がないため、再学習について話すのではなく、適合不足について話す必要はありません。 しかし、それは私たちに合っています。



境界線を探す方法がわかったので、変数を選択して配置する必要があります。

ここでも自然なことは何もありません。多くのアンサンブル教育方法には、scikit-learnにfeature_importances_メソッドがあります。 深さ10の1000本の木のあるランダムフォレストを使用し、f1スコアをメトリックとして使用しました。 出力では、ランク付けされた変数のリストを取得しました。 通常起こるように、変数の重要性にはべき乗則分布があり(私たちの場合も例外ではありません)、最も重要な変数は少し先に進みます。 私たちはそれにとどまることにしました。



何を得たの



最も重要な変数は、ユーザーがサービスを体験した日数です。



これは良い結果ですか?

はい、いいえ。 一方では、サービスで「転換点」が発生してから何日後にユーザーがそれを積極的に使用し始め、それを使用できますが、他方では、彼が何をするのか正確にはわかりません。



そして、望ましい結果を達成していないため、次に何をしますか?

そして、すべてが簡単です。 「基本的な」境界線を作成したら、境界線の左右でユーザーがどのように異なるかを理解する必要があります。 また、タスクは再び理想的な境界線を見つけることでしたが、ユーザーの特定のアクションを反映する機能については以前と同じ方法で行いました:単語トレーニング、単語の追加、テストの学習、文法トレーニング、コース。 しかし、今ではターゲット属性が異なります。1-「ベース」境界の右側、0-左側。



その結果、忠実になるためにユーザーがしなければならないことを示すガイドラインが得られました。さらに、これらのガイドラインはユーザーの特定のアクションで表現されています。



私たちは運動が好きでした、あなたもそれを楽しんでください:)



ただし、結果についてのコメントとそれに対応する方法をいくつか追加する必要があります。

1)結果は、サービスとのユーザーインタラクションの現在の仕組みを反映しています。 サービスが変更されると、サービスと対話するロジック全体が変更される場合があります。

2)実際、私たちの結果は強力な仮説の本質です。製品の機能やマーケティング活動を導入すると、ユーザーが見つけた境界に到達するように動機付けられるため、すぐに忠実になるという事実とはほど遠いからです。 これはテストする必要があります。



PS: アナリストの募集もあります! 仕事に来てください!



All Articles