見出し画像

変動検知機能が大幅アップデートされました 【wevox data blog】 - formal ver.

アトラエ Data Scientist 杉山です。
この記事では、新しい変動検知機能(2020年3月リリース)の説明をします。

画像6

変動検知機能が大幅アップデートされました

wevox で提供していた変動検知機能が、大幅にアップデートされました。
今までは、

誤報が多い
大事な変化を見逃す
処理が非常に重い

という問題がありましたが、このすべてが大幅に改善されました。

パルスサーベイの肝は、変動を素早く察知できること!
新しい画面で検知されているあなたのチームのスコア変動は、納得感があるでしょうか?
何となく肌で感じていたことがデータになって現れていたり、全く気づいていない事実に気付かされたり、はたまた誤報だったり、いろいろな可能性があると思います。
いわゆる AI にできるのは、データから見えることをお伝えするところまでであるというのが現状です。完璧に組織課題を検出し、 AI の言うとおりにしておけば組織が良くなるということは(今の私の技術レベルでは)不可能です。 AI が検出した変動をきっかけに、チームの状態について考えていただく。これが、 AI と人間が協同する、今のあり方だと思います。(そして、将来も、 AI の言いなりになっておけばいいという仕事はありえないと思います。)
是非、これを機に、チームの状態について考えてみていただけると幸いです。

新アルゴリズムの特徴

新しい変動検知アルゴリズムは、それぞれ役割の異なる統計手法3種の結果を総合して変動を検知しています。
(詳しいことは後ろの方に書くので興味ある人は読んでいただけると嬉しいです。)

今回のアルゴリズムでは、 wevox data science team の総力を結集しました。
結果として、

(1) チームの人数の大小に関わらず注目すべき変動を検知する
(2) メンバーの異動によるスコア変動も加味して注目すべき変動を検知する
(3) 短期の急激な変化も、長期の緩やかな変化も両方検知する
(4) データが溜まるほど個々のチームについての学習が進み、より個別最適化された変動検知ロジックに進化していく

という特徴があるアルゴリズムに仕上がっております。

また、変動表示までの速度も大幅改善されています。
今までは、長いと数分かかっていましたが、今回は数秒もすれば表示されると思います。(もちろん、回線次第ですが。)

納得感がない挙動をしていたら…

その時は、ぜひとも私たちにお教えください!
変動検知 - 通報フォーム
頂いたご意見をもとに、さらなる精度向上にはげみます!
(このフォームで頂いた意見は、機能改善のみに利用するので、個別の返信できません。ご了承くださいませ。)

ここから先は、細かいロジックについて記します。
興味がある方のみ読んでください。

変動検知 - 3つのアルゴリズム

さっきも書きましたが、今回の変動検知は3つの変動検知アルゴリズムの合議制になっています。
それはこの3つです。

1. 長期変動検知
2. 短期変動検知
3. 異常水準検知

はじめの2つはかなり難産な機能でした。(後ろに書きます。)
3つめの異常水準検知が、 wevox にデータを貯めれば貯めるほど、個々のチームについての学習が進み、どんどん個別最適化されて精緻になっていくアルゴリズムになっております。

それでは、1つずつ紹介します。

1. 長期変動検知

このアルゴリズムは、長期間(90日)で起こった変化を検知します。
つまり、90日前のグループの状態と、直近の配信時のグループの状態を比較して、その差が無視できないレベルで大きければ変動として検知されます。

と、ただそれだけなのですが、実は、変動検知は難しいのです。

あるチームで、10点だけスコアが変化したとしましょう。
ですが、そのチームが3人なら、その程度の変化はよくあることで、特に注目に値しません。
でも、20人いるチームで10点もスコアが変わるのは一大事で、これは絶対に気づきたいですよね。
つまり、チームの人数によって、気づきたい変化の大きさが異なるのです。
(同様に、小項目はブレやすく、エンゲージメントはブレにくいが、エンゲージメントの変化こそ知りたい!という課題もあります。)

これとは別に、こんな可能性もあります。
あるチームは、20人チームだったのですが、10人が異動で別チームへ行き、別の10人が異動で入ってきたとします。こういうときは10点くらいのスコア変化もあったりします。
が、それを検知されても困りますよね、、、。
実際、大きなスコア変動があっても、異動が原因ということが多いです。

今回はこの2つの問題に対処しました。
スコア計算に利用するデータを、「90日間ずっとそのチームにいた人」に限定して異動でスコアが動く問題を解決しつつ、
人数毎にブレが異なる問題については、専用の統計モデルを作成し、本質的なグループの状態とその変化を推定することで、人数が何人であろうと、項目が何であろうと対等に変化を比較可能になりました。

実は私の専門領域は数理統計なのですが、かなりまともなものを実時間で動くように構成しました。
階層ベイズモデル項目反応理論を組み込み、さらに、統計力学的概念である「温度」を利用して、安定して信頼できる推定ができるようになっています。
(個人的に、「温度」という概念を実務で使うのが目標の1つだったのですが、それがここで達成されました。残り2つは「選択公理」と「導来圏」です。引き続き狙っていきます。)
こちらについては、またそのうち、詳しい解説記事を書こうかと思います。

ま、難しいことはいいのです。
ともかく、人数によるブレ、項目によるブレ、異動による変化を統計的に取り除き、本質的な状態の変化を推定することで、ちゃんとした変動検知になったと思います。

2. 短期変動検知

このアルゴリズムは、今回の配信と前回の配信の比較をして、重要な変化を検知してくれます。

基本思想は、1つ上の、「長期変動検知」と同じです。

ですが、  wevox のパルスサーベイは、毎回全問を聞いているわけではありません。なので、その回のサーベイでは答えられなかった項目の変化も推定し(欠測補完といいます)、変動検知をしています。

ま、これも、難しいことは置いておくと、
人数によるブレ、項目によるブレ、異動による変化、回答の有無による偏りを統計的に取り除き、本質的な状態の変化を推定することで、ちゃんとした変動検知にしたということです。

3. 異常水準検知

このアルゴリズムは一番シンプルです。直近1年のチームのスコアの変動を加味して、今までと違うチーム状態になったことを検知してくれます。

例えば、いままではスコアが60点から70点で推移していたのに、急に75点になった時を教えてくれます。
なので、大きな変化があったときのみならず、毎回の変化が小さくとも、コツコツ変化を続け、チームが新しい水準に至ったことを教えてくれるのです。

ちなみに、このアルゴリズムは、あえてメンバーの異動による点数変化も検知するようにしています。このアルゴリズムの哲学が、「今までのチームではなかった水準にスコアが移行した」ということを検知するということにあるので、メンバーの異動であっても検知するべきだと考えたからです。

といいつつ、これは結構迷いました!
もしご意見あれば、 変動検知 - 通報フォーム を通して教えていただけると嬉しいです!

変動検知の結果に違和感がある例

いままでは、「この変動検知はすごい」っていう観点で説明してきましたが、最後に逆のお話をします。
このアルゴリズムたちはいわゆる AI のたまごみたいなものなのですが、 AI なので、やはり間違えてしまうことがあります。
今わかっている例をお伝えするので、おや?と思ったらここを参考にしていただけると、納得できる回答があるかも知れません。

それでもおかしかったら、 変動検知 - 通報フォーム までお知らせください!

ここでは以下の5つを紹介します。

変化しているのに検知されない
スコアは上がっているのに減少と検知される
長期変動と短期変動が食い違う
一時的なブレを拾ってしまう
超長期の変動は拾えない

変化しているのに検知されない

変化してるのに検知されない! ということが、たまにあります。たとえば、こんな場合です。

変化してるのに検知されない

明らかにスコアが上昇しているのに、この場合は検知されませんでした。

今回のアルゴリズムは、100回配信したときに5回程度以下しか起こらない大きさの変化を検知しています。なので、このレベルの変化でも、そこまで(統計的には)レアでない変化だったと言えます。
(検知量を増やすと誤報が増えるので、悩ましいところであります。)

とはいえ、ちょっと、これは、検知したいと思っています。引き続き精進します。

スコアは下がっているのに、上昇と検知される

見た目減ってるけど上昇検知(内部の人はスコア改善)

5/14 のタイミングで、スコアは前回と比べて6点下がっていますが、短期変動検知は「上昇」という検知をします。なぜでしょうか。

これは誤報ではありません。実は、細かくデータを見ると、このタイミングでこのチームには異動があり、大きくメンバー構成が変わっています。実際。異動しなかったメンバーは、スコアが6点上昇しています。なので、そちらに注目していた変動検知ロジックは、「上昇」と判定をします。かなり紛らわしいですが、今までの UI ではわからなかったことも分かるようになりました。

長期変動と短期変動が食い違う

長期と短期の食い違い

上記のようなスコア変化をした場合、12/15時点で、「短期変動は上昇」「長期変動は下降」という検知結果が出ます。レアケースですが、こういう場合もあります(この場合、画面上は、「下降」と表示されます)。
変動検知は難しいですね、、、。

解釈としては、「ブレが戻っただけで、トレンドは下降」か「下降トレンドが終了し、上昇に転じている」などがあり得ると思います。
残念ながら、データだけからだと、このどちらか、または別の可能性かは分からないので、実際の現場を知っている皆さんに判断を委ねたいと思います。

一時的なブレを拾ってしまう

ブレを拾う

この推移でも、今回の変動検知は「重要な変動だ!」と言って検知してしまいます。ですが、どうやら、その後の推移を見ると、ちょっとスコアがブレていただけのようにも見えます。
どうしても、検知するタイミイングでは、将来スコアが戻る(つまりブレだった)のか、将来もスコアが低いまま(本質的な変動)なのか分かりません。
このように後から見れば大したことなかったことを拾ってしまうこともあります。

ですが、「後から見れば」を予測できるほどの力はまだありませんし、アンケートデータのみで、チームの雰囲気を知らずに予測するのは、今後を含めても極めて困難だと思います。
やはりここは、変動の検知をきっかけとして、実際のチームを知っている wevox ユーザーの皆さんに、本当に注目すべき事が起こっているかどうかを再度考えていただくのが一番いいのではないかと思います。
(重ねてですが、これが、 AI と人間の協働の一つの形です。)

超長期の変動は拾えない

超長期変動

実は、このタイミングでは、変動検知は働きませんでした。
正確にお伝えすると、スコアの下降期間の途中何回かは検知されますが、この一番スコアが低かったタイミングでは検知されませんでした。
「異常水準検知」にて、長期変動を検知するようにはしているのですが、下降トレンドが超長期に亘って継続する(今回は約1年)の場合、下降トレンド自体にアルゴリズムがなれてしまって、検知してくれなくなってしまったようです。
こちらも解決できるよう、引き続き精進します。

おわりに

以上で、重要な変動検知の説明を終わります。
この機能が、皆さんのチーム改善に役立つことを切に祈ります。