[データ分析]棒グラフで「規模や効果」を可視化 〜 どちらの広告が効果的なのか?やさしいデータ分析

データ分析の初歩から応用まで少しずつステップアップしながら学んでいく連載の第7回。グラフを利用して規模や効果の差、つまり大きさの差を可視化する方法や、考え方などについて説明します。具体的には棒グラフを使いますが、慣れ親しんだ棒グラフでも、作成時の準備や意外な落とし穴など、改めて考慮すべき点がたくさんあります。

» 2023年08月31日 05時00分 公開
[羽山博]
「やさしいデータ分析」のインデックス

連載目次

 データ分析の初歩から応用まで少しずつステップアップしながら学んでいく連載の第7回です。前回の特別予告編では、可視化の目的と利用するグラフ、その効用などについて整理しました。幾つかの事例を取り上げ、ケーススタディーを通して、分析の流れと考え方を追いかけるということでしたが、今回はその第1弾です。

 まずは、規模や効果を可視化するために、棒グラフの活用について考えていくことにします。これまで何気なく使っていたグラフかもしれませんが、作成する際の前処理や誤った使い方など、考慮すべき点が幾つもあります。なお、Excelのあまり知られていないテクニックや関数についても併せて紹介します。

連載:

『社会人1年生から学ぶ、やさしいデータ分析』

社会人1年生から学ぶ、やさしいデータ分析

 この連載では、データをさまざまな角度から分析し、その背後にある有益な情報を取り出す方法を学びます。
 データの収集方法、データの取り扱い、分析の手法などについての考え方を具体例で説明するとともに、身近に使える表計算ソフト(ExcelやGoogleスプレッドシート)を利用した作成例を紹介します。
 必要に応じて、Pythonのプログラムや統計ソフトRなどでの作成例にも触れることにします。
 数学などの前提知識は特に問いません。肩の力を抜いてぜひとも気楽に読み進めてください。

羽山博 羽山博

筆者紹介: IT系ライターの傍ら、非常勤講師として東大で情報・プログラミング関連の授業を、一橋大でAI関連の授業を担当。書道、絵画を経て、ピアノとバイオリンを独学で始めるも学習曲線は常に平坦。趣味の献血は、最近脈拍が多く99回で一旦中断。さらにリターンライダーを目指し、大型二輪免許を取得。1年かけてコツコツと貯金し、ようやくバイクを購入(またもや金欠)。


サンプルファイルの利用について

 本稿では、表計算ソフトを使って手を動かしながら学んでいきます。表計算ソフトMicrosoft Excel用の.xlsxファイルをダウンロードできるようにしています。デスクトップ版のExcelが手元にない場合は、Microsoftアカウントがあれば使える無料のMicrosoft 365オンライン、もしくはGoogleアカウントがあれば使える無料のGoogleスプレッドシート(Google Sheets)をお使いください。Microsoft 365オンラインの場合は、.xlsxファイルをOneDriveにアップロードしてから開いてください。Googleスプレッドシートの場合は、.xlsxファイルをGoogleドライブにアップロードしてから開いた上で[ファイル]メニューの[Google スプレッドシートとして保存]を実行してください(Googleスプレッドシート独自の機能を使っている場合は、ファイルを共有して参照できるようにします。その場合は、該当する箇所で使い方を記します)。

たかが棒グラフとあなどるなかれ 〜 売り上げの差を可視化してみよう

 データの特徴を可視化するための方法として、おそらく誰もが最も慣れ親しんでいるのが棒グラフでしょう。数値の大きさに合わせて棒の長さを変えるだけなので、考え方に難しいところはなさそうです。実際、棒グラフなら小学生の頃から何度も作成したことがあると思います。2017年告示、2020年全面実施の学習指導要領(PDFファイル)でも小学3年生で学ぶことになっています。しかし、収集されたデータを棒グラフとして表すには、手描きにしても、ソフトウェアを使うにしても、幾つかのステップを踏む必要があります。また、分析を行う上でも、意外に奥の深いところがあります。

 では、始めましょう。図1をご覧ください。これは、ユーザーがWebサイトの広告を最初にクリックした日のクリック数とその広告から得られた売り上げの一覧です(架空のデータです)。同じユーザーが複数回同じ広告をクリックすることもあるかもしれませんが、ここでは最初にクリックした日を基準に回数をカウントしています(2回目以降は数えないものとします)。このデータを基に、サイトAに広告を出した場合とサイトBに広告を出した場合の売り上げを比較できるグラフを作成し、どちらのサイトの広告が有効なのか分析してみましょう。


AI博士

 Webサイトの利用とその効果を分析するためには、Google Analyticsなどのツールが利用できます。さまざまなデータの収集や可視化、予測などを行うことができるので、実務ではそういったツールを活用するのが一般的です。ここでは、ツールの利用方法ではなく、データ分析の「ツボ」に触れることが目的なので、Excelなどの身近なツールを利用し、簡単な事例を分析するプロセスを追いかけます(事例はきわめて単純化したものなので、データの値は現実離れしたものになっているかもしれませんが、ご容赦のほど)。

 なお、Google Analyticsについて知りたい方は公式ページ公式の無料オンライン講座『Googleアナリティクス4のやさしい教科書。』(山野勉著、MdN)、『Googleアナリティクス4 設定・分析のすべてがわかる本』(小川卓著、ソーテック社)などの書籍をご参照ください。


 サンプルファイルをこちらからダウンロードし、[売上一覧]ワークシートを開いて取り組んでみてください。Googleスプレッドシートの場合はこちらのサンプルファイルを開いてメニューバーの[ファイル]−[コピーを作成]を選択し、Googleドライブにコピーしてお使いください(曜日の表示形式をGoogleスプレッドシートに合わせた形式にしてあるだけで、内容は同じです)。

広告と売り上げのデータ 図1 広告の回数と売上金額のデータ
売上金額はE列とF列に入力されている。このデータを基に、売り上げの差を比較するための棒グラフを作成してみよう。本来なら長期にわたるデータが必要だが、簡単にするため1週間分のデータとしてある。なお、必要に応じて計算を行うなど、データを加工しても構わない。

 さて、皆さんはどのようなグラフを作成したでしょうか。最初に考えるべきことは、どのデータをグラフにするかということですね。取りあえず売上金額をそのまま棒グラフにした方は、図2のようなグラフになったのではないかと思います。グラフを見ると曜日ごとの売り上げの傾向が分かっていいかも……と思われるかもしれませんが、ここでの目的はあくまでもどちらのサイトの広告が有効なのかを知りたいということです。もちろん、曜日ごとの傾向を見ることも重要ですし、これはこれで興味深いのですが、図2のグラフだとサイトの優劣が分かりにくいですね。

売上を棒グラフにしたもの) 図2 売り上げをそのまま棒グラフにしたもの(売り上げ全体は比較できない)
系列の見出しとデータ、横軸の項目を選択して単純に棒グラフを作った例。グラフタイトルなどの設定は一切変更していない。サイトAの売り上げが週の後半に上がっており、サイトBの売り上げが週の最初と最後に上がっているような印象は得られるが、サイトAとサイトBの売り上げ全体を比較するのにはあまり適してはいない。作成例は[売上一覧(日付ごとのグラフ)]ワークシートに含まれている。

 目的に合ったグラフを作る前に、図2のグラフをどのようにして作成したかを説明しておきます(ここでの目的からは外れますが、作成手順を知ることはグラフ作成のスキルを上げる上で役に立つので)。なお、以下の手順と、以降の図7までのグラフ作成方法や考え方については、動画でも解説しています。Excelでの手順を丁寧に追いかけたい方はぜひご視聴ください。

動画1 Excelでの棒グラフの活用と離れた範囲の選択方法


  • セルA4A11をドラッグして選択する(これが横(項目)軸のラベルになる)
  • [Ctrl]キーを押しながら、セルE4F11をドラッグして選択する(これらが系列の見出しとデータになる)
  • [挿入]タブを開き、[縦棒/横棒グラフの挿入]−[集合縦棒]を選択する
    • Googleスプレッドシートの場合は、メニューから[挿入]−[グラフ]を選択し、[グラフエディタ]の[グラフの種類]のリストから[縦棒グラフ]を選択する

 棒グラフを作成するときには、横(項目)軸のラベルと、系列の見出しとデータを範囲指定する必要があります。この例では横(項目)軸のラベル(セルA4A11)と系列の見出しとデータ(セルE4F11)が離れた位置にあることに注意が必要です。離れた複数の範囲を選択するには[Ctrl]キーを押しながら、それぞれの範囲をドラッグします(意外に知られていない操作ですね)。


AI博士

 Excelでは、セルE4F11をドラッグして棒グラフを作成するだけでも同様のグラフが表示できます。しかし、横(項目)軸に対する値が設定されないので、横軸に日付ではなく12……といった連番が表示されます。

 Googleスプレッドシートでは、セルE4F11をドラッグして棒グラフを作成すると、E列がX軸の値と見なされてしまい、F列だけのグラフになってしまいます(Googleスプレッドシートでは、Excelの「横(項目)軸」は「X軸」と呼ばれます)。その場合は[列Eをラベルとして使用]チェックボックスをオフにすれば、E列もグラフ化する系列として扱われ、E列とF列のグラフが表示されます。


 試行錯誤的にいろいろなグラフを作っているうちに、思いも寄らなかった発見があることもまれではありません。しかし、目的に合った可視化の方法を選べば、効率よく分析が進められるのも事実です。目的を意識していれば、見通しがつくようになります。ムダに試行錯誤しなくても、さまざまな角度から分析ができるようになるはずです。……というわけで、回りくどくなってしまいましたが、次に、売り上げ全体を比較できるようなグラフを作ってみることにします。


AI博士

 グラフの種類を選択するにあたっては、横軸がどのような項目であるかを意識しておく必要があります。横軸が日付を表す値であり、時系列での変化を見たいのであれば、折れ線グラフの方が適しています。また、横軸も縦軸も変数であり、それらの関係を見たい場合には、散布図が適しています(横軸がX、縦軸がYになります)。サイトAとサイトBの値を比較したい場合(後述)のように、横軸がカテゴリを表す場合は棒グラフが適しています。


グラフ作成のための前処理を行う(1)〜 売り上げを集計してからグラフ化する

 サイトAとサイトBの売り上げを比較するなら、あらかじめ売上金額を集計しておく必要があります。分析の目的に合った可視化を行うためには、集計が必要になる場合があるということです。集計の方法には、SUM関数を使う方法、集計機能を使う方法、ピボットテーブルを使う方法がありますが、ここではSUM関数を使って合計を求めておきましょう。SUM関数については説明するまでもないと思いますが、この連載では一応初出なので、最後に関数の形式をまとめてあります。

売上集計 図3 売上金額を集計した表
セルE12に「=SUM(E4:E11)」と入力し、セルF12にコピーする。これらの合計の値をグラフ化するとよい。これまで何気なくグラフを作成してきた人も多いかもしれないが、グラフを作成する前には、集計などの前処理が必要になることを意識しておくことも重要。

 図3を作成する手順は以下の通りです。

  • セルE12に「=SUM(E4:E11)」と入力する
  • セルF12にコピーする

 この表は、上でダウンロードしたファイルの[売上集計]ワークシートに含まれているので、それを基に売り上げが比較できるグラフを作成してみましょう(図4)。手順は図4の後に箇条書きで示しています。

売上集計のグラフ 図4 売上金額の比較ができるグラフを作成する
合計だけをグラフ化する。セルE4F4とセルE12F12を選択して棒グラフにすればよい。売り上げを集計した時点でも想像は付くが、グラフを見れば、サイトAの方が売り上げの合計が大きいことがよく分かる。……が、実はまだ落とし穴がある(後述)。作成例は[売上集計(合計のグラフ)]ワークシートに含まれている。

  • セルE4F4をドラッグして選択する(これが横(項目)軸のラベルになる)
  • [Ctrl]キーを押しながら、セルE12F12をドラッグして選択する(これらが系列のデータになる)
  • [挿入]タブを開き、[縦棒/横棒グラフの挿入]−[集合縦棒]を選択する

 Googleスプレッドシートの場合は、以下のような操作で同様のグラフが作成できます。

  • セルE12F12をドラッグして選択する(これらが系列のデータになる)
  • メニューから[挿入]−[グラフ]を選択し、[グラフエディタ]の[グラフの種類]のリストから[縦棒グラフ]を選択する(この段階では各日付のグラフも表示される)
  • [グラフエディタ]の[行と列を切り替える]チェックボックスをオンにする
  • [グラフエディタ]の[X軸を追加]をクリックし、右端に表示される[データ範囲の選択]ボタンをクリックする
  • セルE4F4をドラッグして選択し、[OK]ボタンをクリックする(これがX軸のラベルになる)

AI博士

 セルE4F12を選択して棒グラフを作成し、5行目〜11行目を非表示にするという方法でも同様のグラフが作成できます(ただし、Googleスプレッドシートでは、[行と列を切り替える]チェックボックスをオンにし、[列Eを見出しとして使用]チェックボックスをオフにしておく必要があります)。


 実際のところ、金額を集計した段階でサイトAに広告を出した方が、売り上げが大きいことは分かりますが、可視化するとそのことが顕著に分かります。が、しかし、です。この可視化には落とし穴があります。皆さんはどう思われるでしょうか。すでに答えが分かっている方もおられるかとは思いますが、サイトAの広告クリック数の方が多いので、サイトAからの売り上げが大きいのは当然といえば当然です。確かに集客に関してはサイトAが勝っていますが、広告の効果を見るなら、1クリック当たりの売上金額を見ておく必要があります


AI博士

 同様の例は枚挙にいとまがありません。例えば、GDP(国内総生産)ではなく1人当たりGDPを見る、人口ではなく人口密度(人口/km2)を見る、都道府県別感染者数ではなく、都道府県の人口1000人当たりの感染者数を見る……などです。他にもどんな例があるか考えてみるといいですね。


グラフ作成のための前処理を行う(2)〜 広告1クリック当たりの売り上げをグラフ化する

 では、1クリック当たりの売上金額を求めて、グラフを作成してみましょう。グラフ化に必要な値は図5のセルG12とセルH12の値だけですが、セルG5H11に毎日の値も併せて求めてあります。[売上集計(1回あたり)]ワークシートを基にグラフを作成してみてください。念のため、図5の作成方法も図の後に箇条書きで示しておきます。

1回当たりの売上金額 図5 クリック1回当たりの売上金額を求める
G列とH列に、1クリック当たりの売り上げを求める。「売上/クリック数」で計算すればよい。グラフ作成のためにはセルG12の値(1.56)とセルH121.76)の値を使えばよい。

  • セルC12に「=SUM(C5:C11)」と入力する
  • セルC12をセルD12にコピーする
  • セルG5に「=E5/C5」と入力する
  • セルG5をセルH5にコピーする
  • セルG5H5を選択し、セルG12H12までコピーする

AI博士

 上記のコピー操作を行うと、表の下の方にあらかじめ設定されている書式が崩れてしまいます。そのような場合には、コピーした後に表示される[貼り付けオプション]ボタンをクリックして[書式なしコピー]を選択すると、元の書式に戻ります。


 図5のように集計した段階で、1クリック当たりの売り上げではサイトBが勝っているように思われます。続いてグラフを作成してみましょう(図6)。手順は、図4で売上金額をグラフ化した例とほぼ同じです。

1回当たりの売上金額のグラフ 図6 クリック1回当たりの売上金額をグラフ化する(差が強調されたグラフ)
1クリック当たりの売上金額はサイトAが1.56、サイトBが1.76なので、サイトBの方が優秀であることが読み取れそうである。とはいえ、1週間のデータだけでは、1.76−1.56=0.2200円)という差は「たまたま」だったかもしれないので、これだけで差が大きいのか小さいのかは明確には分からない。作成例は[売上集計(1回あたりグラフ)]ワークシートに含まれている。

  • セルG4H4をドラッグして選択する(これが横(項目)軸のラベルになる)
  • [Ctrl]キーを押しながら、セルG12H12をドラッグして選択する(これらが系列のデータになる)
  • [挿入]タブを開き、[縦棒/横棒グラフの挿入]−[集合縦棒]を選択する

 Googleスプレッドシートの場合は、以下のような操作になります。

  • セルG12H12をドラッグして選択する(これらが系列のデータになる)
  • メニューから[挿入]−[グラフ]を選択し、[グラフエディタ]の[グラフの種類]のリストから[縦棒グラフ]を選択する(この段階では各日付のグラフも表示される)
  • [グラフエディタ]の[行と列を切り替える]チェックボックスをオンにする
  • [グラフエディタ]の[X軸を追加]をクリックし、右端に表示される[データ範囲の選択]ボタンをクリックする
  • セルG4H4をドラッグして選択し、[OK]ボタンをクリックする(これがX軸のラベルになる)

 売上金額はサイトAの方が大きいですが、図6のグラフを見ると、1クリック当たりの売り上げはサイトBの方が大きいので、「サイトBの広告の方がユーザーに届いている」と確信を持って言えそうです。しかし、ここにも大きな落とし穴があります。次に、そのことについて見ていきましょう。

棒グラフの大きな大きな落とし穴 〜 目盛りの取り方に注意

 Excelで特に何も指定せずにグラフを作成すると、縦(数値)軸の目盛りが自動的に設定されます。そのため、ごく小さな差が強調されすぎて、あたかも大きな差があるように見えることがあります。逆に、目盛りの設定を変えれば、大きな差があっても、あまり差がないように見せることもできてしまいます(いずれにしても悪用禁止ですね)。これがグラフによる可視化の大きな落とし穴の一つです。

 この例では、1週間しかデータを取っていないので、「差がある」と言うにはかなり無理があります。しかし、図6のグラフだけを見せられると「サイトBの方が優れている」という印象が与えられてしまいます。では、誤ったイメージを伝えないためにはどうすればいいでしょうか。縦(数値)軸の目盛りを適切に設定すればいいですね。そこで、縦(数値)軸の目盛りの最小値を0、最大値を2に設定してグラフを描いてみましょう。手順は図7の後に箇条書きで示してあります。ちなみに、Googleスプレッドシートでグラフを作成した場合には、特に何も指定しなくても、最小値が0、最大値が2のグラフ(図7と同様のグラフ)になります。利用するソフトウェアによって、可視化した際の印象が異なることもあるので、目盛りなどの設定はソフトウェア任せにせず、自分で変更できるようにしておきたいものです。

1回当たりの売上金額のグラフ 図7 クリック1回当たりの売上金額をグラフ化する(目盛りを修正する)
縦(数値)軸の目盛りの最小値を0、最大値を2に設定したグラフ。差がありそうな傾向はうかがえるが、それほど大きな差とは感じられない。こちらのグラフの方が「誠実」な可視化と言える。作成例は[売上集計(1回あたりグラフ目盛修正)]ワークシートに含まれている。

  • 縦(数値)軸を右クリックし、[軸の書式設定]を選択する
  • [最小値]に0を入力し、[最大値]に2を入力する

 人は得てして自分の信念に合うようにモノの見方を変えてしまうものです。差があることを主張したいからといって、意識するとしないとに関わらず、図6のようなグラフを作成するのはご法度です。この例はあまりにもあからさまなので、まんまとだまされてしまう人はいないかもしれません。しかし、世の中には印象操作のために巧妙に加工したようなグラフも数多くはびこっています。


AI博士

 T.TEST関数を使って、いずれかのセルに「=T.TEST(G5:G11,H5:H11,1,3)」と入力すると、0.17というt検定の結果が得られます。この値が0.05以下あるいは0.01以下であれば「サイトBの方が大きい」と言えますが、そうでないので「サイトBの方が大きいとは言えない」ことになります(ただし、差がないとも言い切れません)。なお、一般に、データ数が多くなればT.TEST関数の値は小さくなるので、わずかな差であっても「差がある」という結果が得られてしまいます。また、その差は対象となる問題によっても重要度が変わってきます。生命に関わるような領域であれば、ごくわずかな差でも無視できないかもしれません。適切に判断するためには、効果量、検出力、サンプル数の検討が必要になりますが、統計的検定のお話は、今回のテーマから大きく外れるので、ここでは割愛します。興味のある方は『事例で学ぶExcel統計』(羽山博著、日経BP)の第5章などをご参照ください。


 可視化のメリットは数値だけでは分からない特徴が明確になることですが、逆に、それほど大きくない差異を実態よりも大きく見せてしまうことがあるというデメリットも理解しておきましょう。

コラム 費用対効果も考慮する必要がある

 仮にサイトBの方が広告の効果が高いということが分かったとしても、サイトBにのみ広告を出せばいいかというとそういうわけでもありません。現実問題として、費用対効果(コストパフォーマンス)を考える必要があります。例えば、サイトBの広告料が高いのであれば、費用対効果は小さくなってしまいます。

 例えば、広告の予算が10,000円で、ユーザーが広告にアクセスしたときの広告料が表1のようになっている場合、いずれかのサイトに全て広告予算をつぎ込めば売り上げが最大化されます(ここでは、同じユーザーが何回広告をクリックしても広告料は変わらないものとします)。

ケース 広告料(A) 広告料(B) クリック数(A) クリック数(B) 売上(A) 売上(B)
ケース1 1.0 1.1 10,000 9,091 15,600 16,000
ケース2 1.0 1.2 10,000 8,333 15,600 14,667
表1 広告料と売り上げの関係([売上(A)]と[売上(B)]の単位は千円)
ケース1では、サイトBに広告料を全てつぎ込んだ方が有利(16,000千円の売り上げ)。ケース2では、サイトBの広告料が少し高くなるので、サイトAに広告料を全てつぎ込んだ方が有利(15,600千円の売り上げ)。

 この例はあまりにも単純で、制約となるのが広告予算だけなので、どちらか一方に広告を集中させればいいというつまらない結果になってしまいますが、複数の制約がある場合には線形計画法により最適な配分を求めることができます。ちなみに、上の表の値は以下のPythonプログラムで求められます(シンプレックス法と呼ばれる方法が使われます)。広告料が表1のケース1のようになっている場合の例です。

from scipy.optimize import linprog

c = [-1.56, -1.76# 目的関数:-1.56x0-1.76x1(最小値が求められるので、符号を変えておく)
A = [[1.0, 1.1]]  # 制約関数(広告料):1.0x0+1.1x1
b = [10000] # 制約量:1.0x0+1.1x1≦10000

x0_bounds = (0, None# x0の下限と上限
x1_bounds = (0, None# x1の下限と上限

res = linprog(c, A_ub=A, b_ub=b, bounds=(x0_bounds, x1_bounds))
print(res.fun)  # 最小値のみを出力

# 出力例(符号を変えれば最大値となる)
-15999.999999999998  # 小数点以下は誤差。最大値は16000となる

リスト1 広告料によって売り上げがどう変わるかをPythonで求める
scipy.optimizeは、最適化問題を解くための関数を提供しているモジュールで、linprogは線形計画法を解くための関数。linprogでは目的関数が最小となる変数x0, x1 ...の値や、その場合の最小値などが求められる(上の例では目的関数の値を最大化したいので、係数の符号を変えてある)。A = [[1.0, 1.1]] A = [[1.0, 1.2]]に書き換えると、ケース2の結果が求められる。ここでは、制約関数が1つだけなので極端な結果しか得られないが、一般には複数の制約関数を設定し、最適な配分を計算する。

 コードの意味について興味のある方は、科学技術計算のためのパッケージであるSciPyのドキュメントをご参照ください。


 実際には、上のコラムでも触れた費用対効果はもちろんのこと、それぞれのサイトの性質や利用者の違いなどについても考慮しながら、どのように広告を出せばよいかを検討することになると思います。最後に、蛇足ですが、やや先走った話もしておきます。

データをもう少し詳しく見てみよう 〜 時系列データはタイムラグに注意

 今回の目的はサイトAとサイトBの売り上げの比較なので、時系列による分析は行っていません。しかし、時間的な要因を分析すれば、より豊かな情報が得られる可能性があります。考えられることの一つとしてタイムラグがあります。例えば、収入が増えたからといって、すぐに住宅や自動車などの大きな支出が増えるわけではありません。ある程度の期間が経過してから支出が増えることが考えられますね。

 今回のデータにも実はタイムラグがあります。クリック数については、サイトAもサイトBも同じようなパターンですが、売り上げについてはサイトBが1日ずれたパターンになっています。そのことを確かめてみましょう。まず、列を作るためのTOCOL関数を使って、月曜日のクリック数が入力されている行(5行目)に対して、火曜日の売り上げを表示する、といったように、クリック数に対して翌日の売り上げが表示されるようにしてみましょう(図8)。便宜的に、日曜日のクリック数に対して、前の週の月曜日の売り上げが対応するようにしてあります。以降の操作については、動画でも解説しているので、手順を追いかけたい方はぜひご参照ください。

動画2 Excelで配列の作成と相関係数の計算


サイトBの売り上げを1日ずらす 図8 サイトBの売り上げを1日ずらしたグラフ
セルG5に「=TOCOL((F6:F11,F5))」と入力してサイトBの売り上げを1日ずらしたデータを作成する。例えば7月24日(月)のクリック数に対しては、7月25日(火)の売り上げの値が表示されるようにする。ただし、7月30日(日)のサイトBの売り上げは、便宜的にその前の週の7月24日(月)のものを使う。スピル機能により、セルG5G11の全ての結果が表示される。

 TOCOL関数のかっこが2重になっているのは、F6:F11,F5をひとまとめにして第1引数に指定するためです。内側のかっこがないと、第1引数としてF6:F11が指定され、第2引数としてF5が指定されたものと見なされるので、正しい結果が得られません(エラーになってしまいます)。なお、Googleスプレッドシートでは{}で囲み、セミコロンで区切ることにより列(縦)方向の配列を作ることができます(カンマで区切ると行(横)方向の配列になります)。従って「={F6:F11;F5}」または「=TOCOL({F6:F11;F5})」と入力すれば同じ結果になります。

 続いて、サイトAの売り上げ(E列)とサイトBの1日後の売り上げ(G列)をグラフ化しましょう(図9)。作成手順は図8の後に箇条書きで示しておきます。

サイトBの売上を1日ずらす 図9 サイトBの売り上げを1日ずらしたグラフ
TOCOL関数を使ってサイトBの売り上げを1日ずらしたデータを基にグラフを作成。例えば7月24日(月)のグラフ(オレンジの棒)はサイトBの7月25日(火)の売り上げの値を基にしたもの。ただし、7月30日(日)のサイトBの売り上げはその前の週の7月24日(月)のもの。サイトAの当日売り上げとサイトBの翌日売り上げが似たようなパターンで推移していることが分かる。作成例は[売上一覧(日付をずらしたグラフ)]ワークシートに含まれている。

 グラフ作成の方法は図2と同様です。ここでは棒グラフをそのまま使っていますが、変化のパターンを見るなら折れ線グラフの方が見やすいと思います(が、今回は棒グラフだけを取り扱うことにします)。

  • セルA4A11をドラッグして選択する(これが横(項目)軸のラベルになる)
  • [Ctrl]キーを押しながらセルE4E11をドラッグして選択する(これが最初の系列のデータになる)
  • [Ctrl]キーを押しながらセルG4G11をドラッグして選択する(これが次の系列のデータになる)
  • [挿入]タブを開き、[縦棒/横棒グラフの挿入]−[集合縦棒]を選択する
    • Googleスプレッドシートの場合は、メニューから[挿入]−[グラフ]を選択し、[グラフエディタ]の[グラフの種類]のリストから[縦棒グラフ]を選択する

 図9を見ると、サイトAでは広告が最初にクリックされたその日に購買行動が起こり、サイトBでは広告が最初にクリックされた翌日に購買行動が起こっているのではないかという仮説が立てられそうです。そこで、クリック数とその日の売り上げとの相関係数、クリック数と翌日の売り上げの相関係数をそれぞれ求めてみましょう。

 では、[売上一覧(日付をずらした相関)]ワークシートを開いてみてください。相関係数については回を改めて詳しく解説するので、ここでは、セルE14F15に入力されている関数とその結果を確認していただくだけでけっこうです(図10)。相関係数を求めるにはCORREL関数を使います。

当時との相関と翌日との相関 図10 クリック数と当日の売り上げとの相関、翌日の売り上げとの相関を求める
相関係数を求めるにはCORREL関数を使う。引数にはクリック数と対応する売り上げを指定すればよい。サイトAでは当日の売り上げとの相関が0.9178と高く、サイトBでは翌日の売り上げとの相関が0.8331と高くなっている。

 各セルに入力されている関数と作成手順は以下の通りです。

  • セルG5に「=TOCOL((E6,E11,E5))」と入力する(サイトAの1日後の売り上げを求める)
  • セルG5をセルH5にコピーする(サイトBの1日後の売り上げを求める)
  • セルE14に「=CORREL(C5:C11,E5:E11)」と入力する(サイトAのクリック数と当日の売り上げとの相関係数を求める)
  • セルE15に「=CORREL(C5:C11,G5:G11)」と入力する(サイトAのクリック数と翌日の売り上げとの相関係数を求める)
  • セルE14E15をセルF14F15にコピーする(サイトBについても同様に相関係数を求める)

 一方の変数の値が増えると他方の変数の値も増える場合、相関係数の値は1に近くなります(正の相関)。逆に、一方の変数の値が増えると他方の変数の値が減る場合、相関係数の値は-1に近くなります(負の相関)。変数同士に関係がないと考えられる場合には、相関係数は0に近くなります(無相関)。

 結果を見ると、サイトAではクリック数と当日の売り上げに強い正の相関があり、サイトBではクリック数と翌日の売り上げに強い正の相関があることが分かります。やはり、サイトBでは最初に広告がクリックされた翌日に購買活動が起こっているように思われます。つまり、サイトの性質に何らかの違いがあり、サイトを利用するユーザー層やユーザーに与える広告の影響が異なっているのではないか、ということが示唆されます。

 実際のところ、最初に広告をクリックした日と商品を購入した日の記録や、ユーザーのプロフィールを詳細に追いかければ、このような傾向は読み取れます。しかし、洞察力を働かせれば、限られたデータからでもさらなる分析につながるヒントが得られることが分かると思います。逆に、高度なツールを利用していても、単に結果の数値を鵜呑み(うのみ)にしているだけでは本質に迫ることができないということも言えそうですね。


AI博士

 時系列データでは、日数や月数など、期間をずらしながら、自分自身との相関係数(自己相関)を求めていくと、周期的なパターン(季節性変動)が見いだされることがあります。そのような季節性変動による分析や予測も行われますが、それについてはいずれ機会を改めて、ということにしましょう。



 今回は、規模や効果の可視化を行うために棒グラフを作成しました。単に操作を行うだけでなく、目的に合った分析のために、前処理を行ったり、作成されたグラフをどのように読み解くかについて考えたりしました。次回は、時間的な変化の可視化をテーマとしたケーススタディーを通して、折れ線グラフの作成や利用、読み解き方の留意点などを見ていきます。次回も、落とし穴や意外に知られていない機能なども紹介します。どうぞお楽しみに!

この記事で取り上げた関数の形式

 関数の使いこなし方については、この記事の中で紹介している通りです。ここでは、今回取り上げた関数の基本的な機能と引数の指定方法だけを示しておきます。

合計を求めるために使った関数

SUM関数: 合計を求める

形式

SUM(数値1, 数値2, ... , 数値255)

引数

  • 数値: 合計を求めたい値を指定する。数値は255個まで指定できる。数値にセル範囲を指定すると、そのセル範囲の値が合計される。「=SUM(A1:A10)」とした場合、引数の個数はセルの個数(10個)ではなく、1個となる。

平均値の差の検定のために使った関数

T.TEST関数: t検定(平均値の差の検定)を行う

形式

T.TEST(配列1, 配列2, 検定の指定, 検定の種類)

引数

  • 配列1/配列2: 平均値の差を検定したい値の並びを指定する。
  • 検定の指定: 1なら片側検定、2なら両側検定。
  • 検定の種類: 1なら対応のある2群、2なら等分散の2群、3なら非等分散の2群。

指定した範囲のデータを1列に並べるために使った関数

TOCOL関数: 列を作る

形式

TOCOL(配列, 無視する値, 方向)

引数

  • 配列: 列を作りたいデータの並び。複数の範囲を指定するときには(A1:A3, C1:C3)のようにかっこで囲む必要がある。
  • 無視する値: 以下の値を指定する。
    • 0または省略: 全ての値を利用する。
    • 1: 空白を無視する。
    • 2: エラーを無視する。
    • 3: 空白とエラーを無視する。
  • 方向: FALSEを指定するか省略すると行(横)方向に結合する。TRUEを指定すると列(縦)方向に結合する。[配列]がA1:B3の場合、FALSEまたは省略であればA1→B1→A2→B2→A3→B3という並びの列が作られる。TRUEの場合は、A1→A2→A3→B1→B2→B3という並びの列が作られる。

相関係数を求めるために使った関数

CORREL関数: 相関係数を求める

形式

CORREL(配列1, 配列2)

引数

  • 配列: 相関係数を求めたいそれぞれの値の並びを指定する。

「やさしいデータ分析」のインデックス

やさしいデータ分析

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

AI for エンジニアリング
「サプライチェーン攻撃」対策
1P情シスのための脆弱性管理/対策の現実解
OSSのサプライチェーン管理、取るべきアクションとは
Microsoft & Windows最前線2024
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。