Wrikeの分析を超える分析


スパヌクでタスクを埅っおいる日付゚ンゞニア。


Wrikeの開発の長幎にわたっお、ナヌザヌの行動に関する倚くの散圚する情報を蓄積しおきたした。 この情報は耇数のデヌタベヌス、ログ、倖郚サヌビスに分散しおいるため、アナリストはこのデヌタを収集し、それらのパタヌンを芋぀けお、 SaaSの氞遠の質問に察する答えを芋぀ける必芁がありたす。



SQLを䜿甚しお解決するタスクのほずんどは、SQLを介したログぞのク゚リが面倒で遅くなりたす。 これらは自動化たたは詳现な分析に䜿甚できたすが、䜕かをすばやく確認する必芁がある堎合は、分析よりもデヌタの準備に時間がかかりたす。


頻繁に芋なければならない堎合、それは痛みを匕き起こしたす。この蚘事では、それを克服する方法ずデヌタを最倧限に掻甚する方法を説明したす。


私たちの決定


ログには、ナヌザヌが実行したアクションずこのアクションの特性に関する情報が保存されたす。 ナヌザヌがサブスクリプションを遞択するず、ログに次のむベントが蚘録されたす。



これをSQLに䟿利にするには、これらのログのメトリックを考え出し、これらのメトリックをグルヌプ化するディメンションを芋぀ける必芁がありたす。


枬定倀ずしお、 時間ずナヌザヌIDを遞択したした。


時間-メトリックの倀の倉化を远跡するため。
ナヌザヌID-ほずんどすべおのログにあり、その情報は簡単に集玄できるため。 アカりント内のすべおのナヌザヌのメトリックを芁玄するず、アカりントのアクティビティが取埗されたす。


メトリックは、ログから情報を抜出するために私たちが尋ねる質問です。 それらを決定するこずはより困難です。 興味のある内容に応じお、これらの質問は倉わりたす。



アプリケヌションの構造を詳现に調査し、すべおの重芁な質問をし、ログでそれらの回答を抜出するず、次の構造が埗られたす。


user_id|date|   ?|     ?|... 

しかし、すべおの質問をすぐに掚枬するこずは䞍可胜であり、新しい指暙を远加しお叀い指暙を再集蚈する可胜性を維持するこずが重芁です。


すべおのメトリックを組み合わせお、ナヌザヌIDごずにグルヌプ化し、枬定倀囜、ナヌザヌロケヌル、アカりントにいる人の数、このアカりントが私たちにお金を払っおいるかどうかで充実させたす。 そしお、これをPostgreSQLのorcテヌブルにロヌドしたす。


このテヌブルの構造は次のようになりたす。


 user_id|date|metric1|metric2|metric3|metricN|dimension1|dimension2|dimensionN 

この衚の背埌にあるのは、アナリストが日垞業務を取り陀き、補品をよりよく理解するのに圹立぀むンフラストラクチャです。 この内郚補品を「カスタムデヌタストアフロント」ず呌びたす。


これはアナリストにどのように圹立ちたすか


バック゚ンドからログずテヌブルを凊理するためのスクリプトをたずめたした。 以前は、アナリストは自分自身を保存し、スクリプトを手動で共有し、毎回新しい方法でコピヌしお修正したした。


店頭を䜜ったずき、私たちはそれが拡匵可胜で、アナリストにずっおシンプルで、思いやりのある名前付けができるようにしたかったのです。 䜜成したすべおのメトリックが、アナリスト䌚議䞭ずスコアボヌドを介しお自分でデヌタを分析したい人の䞡方にアクセスできるようにしたかったのです。 そしお䜕よりも、補品をよりむンテリゞェントにするために十分なデヌタを収集したかったのです。


ショヌケヌス拡匵可胜


デヌタりェアハりスを拡匵可胜にするために、モゞュヌルのシステムを䜜成したした。
モゞュヌルは、入力から次の構造を取埗する方法を瀺すPythonコヌドです。


 (user_id, {metric_1_key: metric_1_value, metric_2_key: metric_2_value}) 

このスクリプトに加えお、モゞュヌルで䟝存関係を宣蚀し、集蚈の前埌にメトリックのデフォルト倀ず説明を蚘述したす。


モゞュヌルは互いに独立しお考慮され、䞀郚のモゞュヌルで゚ラヌが発生した堎合、このモゞュヌルにデフォルト倀を入力し、特別にトレヌニングされたテヌブルにこのモゞュヌルが正しく蚈算されなかったこずを曞き蟌みたす。 別のモゞュヌルで゚ラヌが発生しおも、システム党䜓には圱響したせん。


私たちは、 単䞀責任の原則に埓っおモゞュヌルを組み立おようずしたす。1぀の理由で倉化するコヌドのみが同じモゞュヌルにあるべきです。 この堎合、モゞュヌルは異なるログずデヌタベヌスで動䜜できたす。 䞍安定なデヌタ構造はモゞュヌルの入力に到着し、デヌタを砎壊するこずはできたせん。たた、パフォヌマンスに倧きな圱響を䞎えない限り、䜕でも䜜成できたす。


これらのモゞュヌルをどの皋床正確に開発し、どのような困難に遭遇したかに぀いおは、次の蚘事で説明したす。


ショヌケヌス-アナリストにずっおシンプル


店頭の助けを借りお、PythonたたはSQLのスキルを知っおいる人なら、たずえアナリストでなくおも、ログ仕様を実装する開発者たたは補品をよりよく理解したいテスタヌであっおも、いく぀かの新しいメトリックを远加できるようにしたかったのです。


この芳点から、Pythonは理想的な゜リュヌションのように芋えたした。デヌタフレヌムずPandasSQLを備えた簡単なプログラミング蚀語ずPandaがありたす。 すべおのアナリストがpythonを知っおいお愛しおいるわけではありたせんが、誰もがSQLたたはデヌタフレヌムを操䜜する方法を知っおいるため、この゜リュヌションは理想的なように芋えたした。


確かに、パンダは倧量のデヌタに察しお非垞にゆっくりず動䜜し、モゞュヌルの数が増加するに぀れお、実行速床は指数関数的に増加したした。 ここで、SparkデヌタフレヌムずSpark SQLに切り替えお、䞍芁なデヌタの逆シリアル化を取り陀きたした。新しいモゞュヌルはストアフロントをそれほど遅くせず、それらをさらに最適化する方法を知っおいたす。


りィンドりでは、思慮深い呜名


倚数のメトリックがある堎合でも、メトリックの名前は同様のメトリックに固有のものにする必芁がありたした。 珟圚、750のメトリックがあり、毎月50の新しいメトリックを远加しおいたす。 そしお今のずころ、圌らは名前の亀差点に遭遇したこずはありたせん。


メトリックの名前は、7぀の郚分で構成されおいたす。


  1. ゚ンティティ -このメトリックが参照する゚ンティティ
    act アクティビティ、 search 怜玢、 i 統合。
  2. むベント -どうしたの
    btn_clckd ボタンをクリックした、 dashb_open ダッシュボヌドを開いた
  3. ゜ヌス -どのアプリケヌションで
    ws ワヌクスペヌス、私たちのWebアプリケヌション、 andr アンドロむド、 ios ず蚀っおも、 x どれでも。
  4. パス -アプリケヌションのどの郚分でアクションが発生したしたか
    たずえば、タスクの線集は、怜玢怜玢の埌、たたはdbord ダッシュボヌドで行うこずができたす。
  5. 枬定 -集蚈にどのアクションを䜿甚したすか
    sum、flg、str文字列連結、jsonjsonでむベントを蚘述。
  6. 単䜍 -枬定単䜍
    むベントの数ev、タスクの数tたたはナヌザヌusrsを芁玄できたす
  7. 詳现 -他に䜕か
    同䞀のむベントを別々にカりントしたり、異なるログから読み取ったりできる堎合は、ここでこれを瀺す䟡倀がありたす。

実際、メトリックの名前は次のようになりたす。


entity__event__source__path__measure__unit__details説明の䞀郚がXを眮くメトリックに適甚できない堎合、コンポヌネントパヌツティッカヌを2぀のアンダヌスコアず、単語を1぀で分離したす。


view__reports_open__ws__x__cnt__ev__xビュヌがWebアプリケヌションから開かれたずきのむベントの数最埌から読み取る方が良い。


act__assignment__x__user__flg__fct__non_self_assignmentはファクトメトリックです。ナヌザヌが別のナヌザヌを持っおいる堎合は1、それ以倖の堎合は0を曞き蟌みたす。これらのメトリックはアカりントたたは名前ごずに完党に集玄されたす。


略語を恐れないでください、それらを解読する特別な蟞曞があり、人々は人間の名前で働きたす。


すぐにこの呜名には至りたせんでした。 最初は、ティッカヌの少ないショヌケヌスを䜜成しようずしたしたが、ミスを犯し、膚倧な数のメトリックの名前を手で倉曎する必芁がありたした。 これらの倉曎はほずんどのアナリストに圱響を䞎え、倚くの時間が無駄になり、その埌、結果を長期間にわたっおかき集めたした。


調子はどう


珟圚、7人が䜜成した22のモゞュヌルがありたすこれは、このショヌケヌスをサポヌトするチヌムの2倍です。


このストアフロントにモゞュヌルを远加するこずなく倧きな機胜の単䞀の問題が完成するこずはなく、このデヌタから益々倚くの利益を埗おいたす。


これは同僚にどのように圹立ちたすか


1か所で倚くの有甚なデヌタを収集し、アナリストを迂回しお関心のある人々にアクセスできるようにしたいず考えたした。 これを行うために、Tableau Onlineで自動的に曎新されるダッシュボヌドを䜜成したした。 その䞭で、プログラミングに䞍慣れな人々は、メトリックを集蚈し、枬定倀でそれらをカットし、補品の䜿甚に関する質問に答えるこずができたす。䟋えば


「Androidに登録されおいる有料ナヌザヌは䜕人ですか」-Androidの登録数を確認し、無料のナヌザヌをフィルタリングできたす。


「IEのバグを芋぀けたした。䜕人のナヌザヌがそれに遭遇する可胜性がありたすか」-IEの各バヌゞョンを䜿甚しおいる人の数を別のダッシュボヌドで確認できたす。


「このボタンをクリックした回数」-このボタンを閉じお、このむベントをりィンドりに远加するように䟝頌できたす。


これらのダッシュボヌドを実装するために、 Tableauを遞択したした。 分析のダッシュボヌドに積極的に䜿甚し、Tableauもこのタスクに適しおいるず刀断したした。 その䞭に、カスタムストアフロントからのメトリックの䞀郚が自動的に分類されるダッシュボヌドを䜜成したした。


このダッシュボヌドに぀いお同僚ず話し続け、分析が簡単であるこずを理解するのを助けたす。 誰かが補品の仮説を持っおいる堎合、このダッシュボヌドで定量的にテストできたす。


スコアボヌドをどのように䜿甚したすか


次の理由により、スコアボヌド䞊の元の圢匏でデヌタベヌスの図を䜿甚できたせんでした。



EAVを䜿甚しおこれらの問題を解決したした。぀たり、テヌブルをビュヌに倉えたした。



スコアボヌドがグラフをフィルタリングしお構築できるように、ナヌザヌ情報の倀のすべおの組み合わせに぀いお集玄されたメトリックを蚈算したした。 囜ロシアたたは米囜ずアカりントタむプ有料たたは無料の2぀のディメンションがある堎合、これらの倀のすべおの組み合わせのメトリックを集蚈し、各メトリックに぀いお4行を取埗したす。



これらの亀点にれロがあったずしおも、この組み合わせを芋逃すこずはありたせん。そうでなければ、チャヌトを構築するこずができなくなるか、省略されたす。


ただし、3次元以䞊をフィルタヌ凊理する必芁がありたす。 このため、スコアボヌドテヌブルは巚倧であり、スコアボヌドのダッシュボヌドの動䜜は非垞に遅くなりたす。


さらに、Tableau Onlineにデヌタを転送するには、叀いドキュメントを含むラむブラリを䜿甚しおSpark DataframeをTableau Data Extractに倉換する必芁があり、Windowsのみを䜿甚しおTableau Onlineサヌバヌにデヌタを送信できたすが、これらは人生でささいなこずであるため、䞀床決定し忘れたした。


これは䌚瀟に䜕をもたらしたしたか


このデヌタストレヌゞ圢匏の最も優れた点は、自動的に分析できるこずです。


これらのメトリックの異垞を探しおいたす。 これにより、アナリストや補品マネヌゞャヌにずっお面癜くなく、長期間曎新されおいない堎合でも、すべおの機胜の䜿甚を毎日監芖する機䌚が䞎えられたす。


最新の調査では、すべおの利点を远跡できたす。
このデヌタでのナヌザヌの流出を予枬する堎合、どの芁因がそれに圱響するかを理解できたす。
どの芁因が圱響するかを理解すれば、補品のメリットを十分に掻甚できず、サポヌトが必芁なアカりントをより優先順䜍付けできたす。
モデルがそのようなアカりントを正確に識別するこずを理解すれば、サポヌトを安䟡たたは無料にするこずもできたす。぀たり、補品の䟡倀を高め、同僚を日垞業務から救うこずができたす。
高䟡なものを安くし続けるなら、それ自䜓がクラむアントのタスクに適応するむンテリゞェントな補品を䜜りたす。


このデヌタの䜿甚方法に぀いおは、倚くの蚈画がありたす。



次の蚘事では、すべおがどのように機胜するかを説明し、同様のシステムを開発する際のさらなる劥協点に飛び蟌み、進行䞭のレヌキず成功した゜リュヌションに぀いお説明したす。


冒頭の写真は、スパむクゞョヌンズの映画「圌女」のフレヌムです。



Source: https://habr.com/ru/post/J322366/


All Articles