ミュージックビデオからのポーズ推定

www.youtube.com

皆さんは、「このダンスを踊りたい!」と思ったとき、どのように習得しているでしょうか。

私は一昨年のハロウィンの時期、友人と USJ に行った際に上記のダンスを身につける必要に駆られました。夜になると急にゾンビたちが現れてこの Rat-tat-tat ダンスを踊り始め(全員キレッキレなのがまたシュールでした)、来場者も一緒に踊るというイベントでした。 楽しい雰囲気で盛り上がりましたが、ダンスを見様見真似で踊るのは私にはなかなか難しく、上手く踊れる人を羨ましく感じたものでした。

私が今回試したものは、動画からそこに写っている人間のポーズを推定する AI 技術です。 ミュージックビデオと自分自身それぞれから体の各部位の座標を得られれば、自分の動きが正解とどの程度異なっているかを把握できます。 これが実現すれば、私を含むダンスが上手く踊れない人への一助となるかもしれません。

続きを読む

価値ある仕事について

新社会人の方々は、ゴールデンウィークが明け、少しずつ実戦投入されはじめ、色んな戸惑いが出始めると思いますが、上手くいくための仕事に対する基本的な考え方を共有しておきます。

f:id:gri-blog:20210508144359j:plain

仕事は依頼者と作業者の関係が成り立ちます。良い作業者になるためには、依頼者の気持ちを理解する必要があります。依頼した後、得られる結果は、だいたい以下の3通りになります。

  • 【タイプ1】期待外れの結果を返してきた: 自分で検算等ができないことを証明したことになり、次回以降、類似した依頼をする気持ちにはなれない
  • 【タイプ2】期待通りの結果を返してきた: ある意味、当たり前のことを当たり前にでき、類似したタスクを依頼することになる
  • 【タイプ3】想定を超えた結果を返してきた: 自分でできない仕事、あるいは自分で考えることができないような内容をできる人材を見つけた喜びとともに、次回以降は、委任の度合いを高めることになる

すなわち、タイプ1の期待外れの仕事をしてしまう人は、仕事を受ける際、自分の理解が合っているか確かめる手順をして、失敗を少なくするように心がける。一方、タイプ2の仕事をする人は、仕事を受ける際、依頼主が仕事内容を事細かく説明せずに理解できることを心がけるのが肝要です。依頼主が仕事内容を定義すればするほど、タイプ2の期待通りの仕事でとどまるようになり、依頼主の口から作業内容が出てきたときには、既に価値が低減している事実に気付くべきです。タイプ3の期待を超えた仕事をするならば、非常に価値の高い仕事ができることを意味し、作業者の自由度は格段に上がります。

データサイエンティストの専門集団として存在するGRIは、このタイプ3の期待を超えた仕事ができることを基本としています。データに関することならば、依頼主が事細かく依頼内容を定義せずとも、作業者が依頼主の意図をくみ取り、データから事前の期待以上の成果を出す。この作業は、毎回ケースバイケースになるため、適切な訓練と周囲からのフィードバックを繰り返すことにより、身に付けることができます。これは、教科書や授業で学ぶことが困難なことであり、実戦によって身に付く力となります。

もしカタログ的な仕事や所属する組織に窮屈と感じている人がいるならば、自分のオリジナリティで未来を作る仕事という活躍の場を弊社で求めても良いのではないでしょうか?

採用情報 | GRIInc. 株式会社GRI

古幡征史

PV動画の顔方向検出について

 PV動画で顔方向検出のプログラムを作る機会がありました。調べてみると様々な回答があり面白いと感じましたが、今回のモデルではPV画像への転用ということで自分の考えを取り入れてプログラムを作成しました。結果は完璧とは程遠いものになってしまいましたが、本記事で考えたことや見えてきた問題点を共有したいと思います。

顔方向検出とは

 顔方向検出とは、画面上の顔の向きを推定する技術です。方法としては、顔の様々なパーツの座標(特徴点)を推定してから、その特徴点を用いて顔の向きを計算していきます。
 今回のモデルでは目・鼻・口から68個の特徴点を推定します(下図)。このモデル(68point_dlib_with_pose.caffemodel)は無料でダウンロードでき、 python の dlib と opencv で簡単に利用することができます。

f:id:gri-blog:20210430101311j:plain
顔の特徴点

出典 : https://www.pyimagesearch.com/2017/04/03/facial-landmarks-dlib-opencv-python/

 ここから顔の向きを推定する方法として、オイラー角を利用する手法が挙げられています。これは、画像のピクセルに加えて奥行の座標を推定することでロールピッチヨーを計算します。

 しかし、今回はライブ画像への転用ということで複数人を同時に検出する必要があり、奥行の推定が難しいと考えました。そこで、以下の条件で顔の向きが正面であるかを判別しました。

  1. 顔の両端の点(上の画像の 1, 17 番)の中間点を求める
  2. 鼻頭点(上の画像の 31 番)の x 座標をとる
  3. 中間点と鼻頭点の x 座標が近ければ、「表面を向いている」とする

 顔の上下については条件を定めていませんが、とりあえずこれでライブ動画の顔方向検出を行ってみたいと思います。アルゴリズムは次の通りです。

  1. 画像から顔を検出する
  2. 検出された顔から 68point_dlib_with_pose.caffemodel を利用して特徴点を推定する
  3. 特徴点から顔の向きが正面かどうかを判別する
  4. 1~3を 1 フレームごとに行う

PV動画でのテスト

 動画は LDH JAPAN さんのものを使用しました。ダンスがかっこいいです!!

www.youtube.com

 全てのフレームで行うと長いので一部分を抜粋して表示します。顔が検出されると黒枠、加えて表面を向いていれば赤枠を付けています。

f:id:gri-blog:20210506002542g:plain
PV画像での顔方向検出テスト

 アップの部分は上手くいっていると思いますが、少し引いた視点では微妙といった結果になりました。次で詳しく考察しています。

問題点・改善案

 テストを行って見つかった問題点を挙げていきます。上のgif 画像以外のところも含みます。

  • 表面を検出できていない部分がある
  • 視点が遠いと顔が検出されない
  • マスクな帽子などの衣装によって顔が検出されない
  • 照明の色によって顔が検出されない

 表面を検出できていない部分に関しては、条件を調整することによって改善できそうです。顔の検出については dlib が検出できる範囲に画像をリサイズし、照明は HSV 変換をして明度、彩度を調整するなどが挙げられます。衣装については現状思いつかないです…

 実際にはライブ動画への転用をイメージしていますので、特に低解像度の顔認識をどうするかを考える必要があります。もっと適切なモデルやアルゴリズムがありそうだと思ったので引き続き追っていきたいとおもいます。

GRI ではこのような AI 開発も行っております。今後ともよろしくお願いいたします。

分析官 安井優平

機械翻訳システムの内部に迫る

機械翻訳システムを使うこと(というよりもその結果を観察すること)はかなり楽しいと思いませんか。機械翻訳自然言語処理の代表的な用途の1つであり、また自然言語処理の技術の進化にモチベーションを与えた存在でもあります。この記事ではこれまでに開発された3種類の機械翻訳の手法をそれぞれ解説してから、3番目の「ニューラル機械翻訳」の内部仕組みについて記述します。

① ルールベース機械翻訳

初期のAIの多くがそうであったように、初代の機械翻訳にも「ルールベース」の手法が使われていました。人間が事前に作成した、両言語に関するマニュアルと照合して訳文を出力します。例えば、単語の意味を対応させた辞書や構文上のルールなどをシステムに実装します。大量な複雑なルールの登録が大変ではあったが、限定的な用途に限っては役に立っていました。

② 統計的機械翻訳

1990年代になると、統計モデルの学習を通じて訳文を出せるようになった統計的機械翻訳が主流となりました。今度は純粋なルールベース手法ではなく、データを用いて学習を行うようになりました。学習データは起点言語と目標言語の文章のペアを大量に集めたものであり、それらのペアを結びつけるための大規模な確率テーブルを算出します。新しい文章が入力された際には学習済みの確率テーブルを見て最適な(尤もらしい)翻訳文を探します。Google翻訳もサービス開始の2006年から2016年までの10年間、統計的機械翻訳の手法を採用していました。

ちなみに、統計的機械翻訳に使われた言語のペアを集めるために、両言語に翻訳された政府の書類や国連の議事録などが使われていました。

③ ニューラル機械翻訳

2016年にGoogleがニューラル機械翻訳であるGNMT(Google Neural Machine Translation)を発表し、機械翻訳にブレークスルーをもたらしました。GNMT に組み込まれているのは、RNNの対から構成されるエンコーダ・デコーダモデルでした(下セクション参考)。エンコーダが翻訳前の文章を読み込んで埋め込み層を用いて分散表現に変換し、隠れ層で特徴表現に変換した活性化値をデコーダに渡します。デコーダを通じて訳文(新しいデータ)を出します。

近年、Google 以外の企業からも機械翻訳システムを開発されたが、殆ど全てがニューラル機械翻訳の手法を使ったものです。

(少し脱線)エンコーダ・デコーダモデルとは

単語分散表現モデルWord2Vec以降に提案された言語モデルの多くは、基本的に、「リカレントニューラルネットワーク」(RNN)を用いています。RNNは「過去の状態」を反映する隠れ層(フィードバック機構)を持つため、時系列データを扱うことができます。自然言語処理では、入力も出力も必ずしも単一の値ではなく、「単語の系列」を予測するケースが多いです。これに対応するRNNを用いたモデルは sequence-to-sequence(Seq2Seq)と呼びます。名前の通り、過去に入力された時系列から新しい時系列へ変換し出力する機構です。(補足:実用上RNNは長い系列をも扱える「LSTM機構」を取り入れています。)

Seq2Seqはエンコーダ(encoder)とデコーダ(decoder)の2つのRNNから構成されており、エンコーダ・デコーダ(encoder-decoder)モデルと呼びます。エンコーダが入力データを処理して符号化(エンコード)し、符号化された情報をデコーダの方で複元(デコード)します。出力データも時系列なので、出力全体を一気に出すことは出来ず、デコーダは自身の出力を時系列の次のステップで入力として受け取りながら最後まで1ステップずつ処理します。

Seq2Seqは機械翻訳のために進化した技術と言っても過言ではありません。エンコーダのRNNで入力された翻訳前の単語系列をベクトルに圧縮し、隠れ層を経由してベクトルをデコーダに渡して翻訳後の単語系列を生成します。RNNの特性として、翻訳元の入力文章と翻訳後の出力は時系列の長さが一致する必要はありません。

機械翻訳に著しい進化をもたらした技術であるエンコーダ・デコーダモデルはその後に開発された数多く言語モデルの「基礎」となり、自然言語処理の進歩に大きく貢献を果たしました。

ニューラル機械翻訳の仕組み

ここで、機械翻訳の内部の仕組みをより具体的に理解してみましょう。下図は英語の”A woman is carrying her cat”(和訳:ある女性は彼女の猫を抱えています)をフランス語の”Une femme tient son chat”に翻訳しているエンコーダ・デコーダモデルを簡略的に表しているものです。これを用いて翻訳の基本的な仕組みを説明します。

f:id:gri-blog:20210505100356p:plain
エンコーダ・デコーダモデルを用いた、英語からフランス語への機械翻訳の簡易的な仕組み図

図にある白い長方形は、連続的な時間ステップで情報処理しているエンコーダもしくはデコーダを表します。この図では省略していますが、入力された単語(例えばwoman)はあらかじめWord2Vecなどの埋め込みモデルを通じて単語ベクトルに変換してからエンコーダ・ネットワークに入力されています。

図の上半分のネットワークはRNNでできたエンコーダ複数個から成り立っています。入力文は「END符号」も含めて7つの時間ステップでエンコードされます。一つの時間ステップ(長方形)から次へ向かう点線矢印は隠れ層での再帰型の繋がりを表すものです。単語は1つずつ隠れ層の活性化値としてエンコードされ、次のユニットに送り込まれます。このようにして、エンコーダ・ネットワークの中で翻訳前の英語の文章を表現するものが作り上げられていきます。最後の7つ目の時間ステップ(END符号付与後)の時点で隠れ層の活性化値が文章全体の「エンコードの結果」となり、これをデコーダ・ネットワーク(図の下半分)に送信されます。デコーダ・ネットワークでは翻訳文を作ります。その出力は翻訳後の文章を構成する単語を代表する数値です。各時間ステップでの出力は次の時間ステップへフィードバックされます。

ちなみに、英語からフランス語へ翻訳するエンコーダデコーダのシステムを訓練するために、通常3000万の文章ペアが必要と言われています。

図のように、英語(入力)は7個のステップで処理されるのに対して、フランス語(出力)は6個と、翻訳前後の長さに縛られることはありません。エンコーダ・デコーダモデルは理論上どんな長さの文章も翻訳できます。しかし、翻訳対象の文章が長すぎると、後半の時間ステップでは先頭の大事な情報を「忘れてしまいます」。有用な情報がどんどん失われないような工夫が必要です。実際、2016年以降、Google翻訳の技術は改善を積み重ねてきました。ここで詳細に触れませんが、例えば、時間ステップごとに情報の重要度を決める「Attention機構」や長文翻訳を高精度かつ高速に行う「トランスフォーマー」などの技術を取り入れています。

おすすめ参考書

日頃、講座制作のために色々と書籍を模索しています。これまでに一番おすすめで、本記事の参考にもさせていただいたのはこちらです。 評判の通り、何百冊AIに関する本を読んでもこの1冊には及びません。今まで理解したと思ったことをこれを読むと「今初めて理解できた」とさとらせてくれる一冊です。

www.amazon.co.jp

原書の英語名は興味深いですね。Artificial Intelligence;A Guide for Thinking Humans.

記事担当者:(分析官・講師)ヤン・ジャクリン

自然言語モデルの最近の課題

当初はウェブ記事のカテゴリ分けや機械翻訳といったもののために開発された「言語モデル」は、今では、文章や楽譜やソースコードまで生成できるまで技術が様々な課題を乗り越えて進化してきました。(※ここでいう言語モデルとは、「どれだけ自然な文脈を実現する単語の並びになっているのか」を、確率値で評価するためのモデルのことです)言語モデルで「すごいことが出来る」と分かった今、今度は、「してはいけないこと」そして「もっと効率的に出来ないか」に関する「発展的な課題」を考える段階となりました。ここでは、大きく論じられている、「公平性」(Fairness)「モデルのサイズ」の2つについて記述していきます。

■公平性について

自然言語処理は人間の言語を対象とするため、どうしても人間社会に潜む様々なバイアスに影響されやすくなります。性別、人種、宗教など個人の特性に左右されているようなモデルを使用した場合、特定のグループにとって不利な結果を出力する可能性があります。

有名な事例としては、Amazon社が開発したAIを活用した人材採用システムです。履歴書に「女性」という単語が含まれると評価が下がるように学習してしまうことが判明され、当然ながらこのシステムは現在使用されていません。 参考: Amazon scraps secret AI recruiting tool that showed bias against women | Reuters

「小説を書ける」と言われるほど、文章生成の能力が高く評価されている「GPT-3」でも公平性の問題が検証されています。例えば、女性という単語から生成された文には「美しい」や「華やか」など女性の外見に関する単語を含みやすい傾向が現れています。人種や宗教に関して共起する単語の感情スコアを検証したところ、さらに悲惨な結果が出ました。「黒人」に対してはネガティブな表現と共起しやすい、「イスラム教」は(他宗教と比べて)「テロリズム」という単語と共起しやすい結果になりました。

近年、言語モデルの公平性はますます重要視されつつあります。有能な技術を社会の中でトラブルなく使用するためには、公平性を担保するための研究が大変期待されています。

■モデルサイズについて

近年開発された有名な言語モデルのパラメーター数が驚くほど膨らんでいきます。例えば、2018年に提案された「BERT」のパラメーター数は3億程度であり、初代の「GPT」はおよそ1億個です。それから1年後に登場した「GPT-2」は15億個、2020年の「GPT-3」が1750億個程度まで巨大化しました。

なぜここまで大きなモデルを作るのでしょうか?実は、パラメーター数やデータセットのサイズ、計算量のべき乗則に従って性能が改善することが実験的に示されているからです。「べき乗に従う」とは端的にいうと、サイズを徐々に増やしても性能は緩やかにしか改善しないので、大きくな性能向上を実現するためにはモデルサイズを急増させないといけないことです。

確かに、パラメータ数の多い巨大なモデルほど、幅広いタスクにおいて汎用的に高い性能を発揮できると言えます。しかしデメリットはコストです。パラメーター数を増やせば増やすほど、必要な学習データの量と計算資源の稼働量も増やす必要があります。近年の巨大モデルの学習には数百〜数千個のGPUやTPUを使います。パラメーター1000個に対しておよそ$1使用すると見積もられているので、例えばGPT-3(1750億個)は10億円を超えてしまいます!こういうこともあって、言語モデルの研究開発はどうしても計算のリソースや予算を使えるIT大手企業を中心に競い合われることになります。 参考論文:The Cost of Training NLP Models: A Concise Overview: [2004.08900] The Cost of Training NLP Models: A Concise Overview

先述のように、巨大な「汎用的自然言語モデル」は幅広いタスクにおいて高い性能を発揮します。一方で、実用上、質問応答や翻訳などの特定のタスクに対応する小さなモデルが望まれることが多く、ユーザーにとってリソース的にも扱いやすいです。事前学習モデルの先駆者である「BERT」が提案された後、転移学習を使う前提で、パラメーター数の少ないモデルの提案も増えてきています

最後に ... 完全なる余談

記事を脳トレがてらに英訳して遊んだりすることがあります。「問題」と「課題」は厳密に意味も使い道も違いますね。英語に翻訳する際に「問題」は簡単に"problem"に出来るけど、「課題」の方は、"theme", "subject being questioned", "problem to be solved" など様々なので悩みます。この記事に出る「課題」に一番すっきり当てはまる英訳は"issue"でしょうね。

記事担当:(分析官・講師)ヤン・ジャクリン

Tableauで任意のピクセル幅の線を引く

久しぶりに、AerosmithのDraw The Lineを聴きながら書いております。

youtu.be

5 Types of Dashboardsという有名なブログポストがあり、かつてこのワークブックをダウンロードして参考に真似しながら、オリジナルバージョンを作ったことがあります。その時、最後の最後まで全くどうやっているのかわからなかったことが、1つありました。それが、この青い線どうやってDraw The Lineしてるのか??でした。

これ↓ f:id:gri-blog:20210501225608p:plain


下の段の折れ線グラフのシートは関係ないみたい。 f:id:gri-blog:20210501230212p:plain


上の段の様だが、このままシートを開くと水色のかけらもない。 f:id:gri-blog:20210501230256p:plain


その後数ヶ月の歳月が経ち、コンテナーという概念があることを知りました。コンテナーのバックグラウンドを水色にしてたのですね。確かに、さっきのシートのキャプチャをよく見ると、外部パディングがbottomだけ入っているでは。。 f:id:gri-blog:20210501230427p:plain


コンテナーとは何かっていうと、シートを入れる入れ物みたいなもので、その上下の重なりを描くとこんなイメージでしょうか。 f:id:gri-blog:20210501230657p:plain

同じ線を引くことは諦めてますが、良かったらこちらの記事も読んでみてください。 gri-blog.hatenablog.com

YoutubeのDraw The Lineのリンク貼ったりして良かったのかはよく分かりませんが、今後ともGRIをよろしくお願いします。

RでベイジアンABテストやってみた。

こんにちは!
データサイエンティストの望月です。

最近、私が携わっている案件で新規会員のCV率向上のため、ウェルカムメール配信を始めました。 このメール配信施策の効果を測定する際、カイ2乗検定のような古典的ABテストではなくベイジアンABテストを実施したのですが、個人的に色々なメリットを感じたので、 本記事ではベイジアンABテストのメリットとともにRでの実装~解釈方法について共有したいと思います。

ベイジアンABテストとは?

簡潔に言うとベイズ統計の理論を踏襲したABテストです。 今回のメール配信施策であれば以下のような流れで2つのグループを比較します。

  1. メールを送ったグループと送らなかったグループそれぞれで、CV率がだいたいこれぐらいの値を取りうるだろうという予想を立てる(=事前分布を設定する)
  2. データが来たらその情報(尤度)をもとに各々の予想(事前分布)を更新する(=事後分布を算出する)
  3. 事後分布をもとに2つのグループを比較する

「もう少し詳しく理解したい!」という方には"楽しみながら学ぶベイズ統計"という本をおすすめします。 最低限の数式理解があれば、ベイズ統計の概要や旨味を知ることができます。

古典的ABテストとの違い

カイ2乗検定のような古典的ABテストの場合、以下のような手間や問題が生じてしまいます。

  • あらかじめサンプルサイズ(何件データを取るか?)を決めておく必要がある
  • サンプルが揃うまでテストを始めることができない
  • テスト結果からわかることは「AとBに有意な差があると言える」か「AとBに有意な差があるとは言えない」であり、 「有意な差があるとは言えない」となったときに、どれくらい言えないのかわからない

対してベイジアンABテストは

  • あらかじめサンプルサイズを決めておく必要がない(テスト設計に統計的知識を必要としない)
  • 任意のタイミングでテスト結果を確認することができる(テストの終了タイミングも柔軟に決められる)
  • テスト結果からわかることは「AはBと比べて何%の確率で効果があると言える」であり、 効果の有無を確率に落とし込むことができる

といったメリットがあります。

Rでやってみる

仮にメール配信施策の途中結果が下図の通りになったとします。

CVした CVしなかった
A(メールを送ったグループ) 50 100
B(メールを送らなかったグループ) 45 105

RでベイジアンABテストを実施する際には"bayesAB"パッケージのbayesTest関数を利用すると便利です。 以下がRのスクリプトです。

# パッケージの読み込み
library(bayesAB)

# サンプルデータ作成
A_cv <- rep(1,50)
A_notcv <- numeric(100)
B_cv <- rep(1,45)
B_notcv <- numeric(105)
A <- c(A_cv,A_notcv)
B <- c(B_cv,B_notcv)

# いざ、ベイジアンABテスト
AB_1 <- bayesTest(A_data = A,
                  B_data = B,
                  priors = c('alpha' = 1,'beta' = 1),
                  n_samples = 1e5,
                  distribution = "bernoulli")

# 結果をプロット
plot(AB_1)

2行目でパッケージを読み込み、5~10行目にかけてサンプルデータを作成しています。 ここで作成したサンプルデータA,BはCVした場合は1,しなかった場合は0が入っている01ベクトルになっています。 13~17行目にかけてベイジアンABテストを実施しています。 bayesTest関数では第1引数"A_test"と第2引数"B_test"に各データを指定します。 第3,第4引数はいったん飛ばして第5引数"distribution"ではデータの母集団分布を指定します。 今回の場合では、確率pで1(CVする)をとり確率1-pで0(CVしない)をとるベルヌーイ分布を指定します。 第3引数"priors"では事前分布のパラメータを設定します。 第5引数"distribution"でベルヌーイ分布を指定した場合、計算上の都合により事前分布にはベータ分布を置くのが一般的です。 このベータ分布は下図の通り2つのパラメータαとβをどのような値にするかによって形が変動します。

f:id:gri-blog:20210329121249p:plain

α=1,β=1の時は[0,1]区間でフラットな一様分布となります。 ここではとりあえず、事前分布としてα=1,β=1のベータ分布(=一様分布)を指定します。

20行目でベイジアンABテストの結果をプロットします。 実行すると3つの図が出力されます。
1つ目の図では、事前分布が表示されます。

f:id:gri-blog:20210329120251p:plain

2つ目の図では、A,Bそれぞれの事後分布から第4引数"n_samples"で指定した回数分のランダムサンプリングを行い、得られたデータの分布が表示されます。 ※今回は100,000と表記しましたが、デフォルトが100,000なので省いても大丈夫です。

f:id:gri-blog:20210329120417p:plain

A(メールを送ったグループ)の分布の方がB(送らなかったグループ)の分布よりも全体的にやや右側に位置しており、 「メール配信の効果が若干だけどあるかも?」ということがなんとなくわかります。

3つ目の図では、(A-B)/Bの分布(相対効果の分布)がヒストグラムとして表示されます。

f:id:gri-blog:20210329120726p:plain

「(A-B)/Bが0より大きい場合」つまり「A>Bの場合」はAのほうがCV率が高いと考えられ、その割合がヒストグラム内に表示されます。 よって、AのほうがBに比べて73.1%効果があるという結論にいたります。 もう少し調査時間をとってサンプルサイズを増やすことが可能であれば、より精緻な値を算出することが見込めます。

最後に

今回は事前分布をとりあえず一様分布としましたが、本当にそれでいいのか疑問に思った方もいらっしゃるかと思います。 そこで次回は事前分布の決め方についてお話したいと思います。 こうご期待!

参考文献

・楽しみながら学ぶベイズ統計学
https://www.amazon.co.jp/%E6%A5%BD%E3%81%97%E3%81%BF%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6%E3%83%99%E3%82%A4%E3%82%BA%E7%B5%B1%E8%A8%88-%E3%82%A6%E3%82%A3%E3%83%AB%E3%83%BB%E3%82%AB%E3%83%BC%E3%83%88-ebook/dp/B08CDJ56GJ
※こちらの動画もベイジアンABテストを理解するのにおすすめです!
https://www.youtube.com/watch?v=zILHctOFqxM&t=533s