<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Association Analysis &#8211; uxmeetsdata.com</title>
	<atom:link href="https://uxmeetsdata.com/tag/association-analysis/feed/" rel="self" type="application/rss+xml" />
	<link>https://uxmeetsdata.com</link>
	<description>UXとデータによる価値創発メディア</description>
	<lastBuildDate>Mon, 03 Jun 2024 07:01:52 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<item>
		<title>UXモデリング入門 #04</title>
		<link>https://uxmeetsdata.com/ux-modeling-howto-04/</link>
				<pubDate>Sat, 31 Aug 2019 11:00:57 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[UX Modeling]]></category>
		<category><![CDATA[Association Analysis]]></category>
		<category><![CDATA[Data Mining]]></category>
		<category><![CDATA[UX Modeling]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=13875</guid>
				<description><![CDATA[アソシエーションルールを可視化。 Cloud DatalabにてCSPADEアルゴリズムの拡張モジュールである...<p class="more-link"><a href="https://uxmeetsdata.com/ux-modeling-howto-04/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm-e1570601392622-1024x512.jpeg" alt="" class="wp-image-13638" width="480" height="240"/></figure></div>



<h2><strong>アソシエーションルールを可視化。</strong></h2>



<p>Cloud DatalabにてCSPADEアルゴリズムの拡張モジュールであるpycspadeを用いて作成したアソシエーションルールを、BigQueryに書き出し、Tableauで可視化しながら系列パターンの分析を行います。</p>



<p>まずは前回の続きで、以下のコードを入力エリアに記述し、実行してみましょう。なお「to_gbq」関数の引数には、アソシエーションルールを格納したデータフレーム、書き込み先のテーブル名、GCPのプロジェクトIDを指定します。</p>



<script src="https://gist.github.com/crosshack/7b4915bfb6c405d5fd4b6ee1629124da.js"></script>



<p>なお、BigQueryへの書き出しがうまく行かない場合は、以下のコードでCSVファイルに書き出し、GCS（Google Cloud Storage）経由でBigQueryに取り込みます。</p>



<script src="https://gist.github.com/crosshack/df742ab8d9af0405f3543b8b87ef1755.js"></script>



<p>以下のように、BigQueryのデータセット「XM」の中に「sum_rules_spm」というテーブルが作成されていることを確認します。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4a-1024x546.png" alt="" class="wp-image-13889" width="480" height="256" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4a-1024x546.png 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4a-300x160.png 300w, https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4a-768x409.png 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>続いて、テーブル「sum_rules_spm」をTableauに取り込んで分析します。Tableau Desktopであれば、スタート画面の［接続］にあるメニュー［Google BigQuery］から選択するだけでシームレスに連携できます。Tableau Publicであれば、GCS（Google Cloud Storage）経由でCSVファイルとしてエクスポートしてから取り込みます。</p>



<p>Tableauへの取り込みが完了したら、以下の手順でクロス集計表を作成し、アソシエーションルールを可視化します。</p>



<ol><li>フィールドの「Sequence」を［行］、「Confidence」を［列］シェルフにそれぞれドラッグ＆ドロップ。</li><li>フィールドの「Confidence」を［マーク］カードの［色］にドラッグ＆ドロップ。</li><li>右上に表示される「合計（Confidence）」カードの右上の▼のメニューで［色の編集…］を選択。</li><li>［色の編集］モーダルで［ステップド カラー］チェックをオン、［詳細］ボタン押下で表示される［中央］チェックをオンに設定。</li><li>フィールドの「Confidence」「Support」「Lift」を順に［マーク］カードの［テキスト］にドラッグ＆ドロップ。</li><li>フィールドの「Confidence」「Support」「Lift」のそれぞれについて、ピルの右端の▼のメニューで［フィルタを表示］を選択。</li></ol>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4b-1024x594.png" alt="" class="wp-image-13894" width="480" height="278" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4b-1024x594.png 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4b-300x174.png 300w, https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4b-768x445.png 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<h2><strong>系列パターンを分析する。</strong></h2>



<p>では、この表をもとに系列パターンを分析してみましょう。「<a href="https://uxmeetsdata.com/association-howto-01/">アソシエーション分析入門 #01</a>」でも触れたとおり、アソシエーションルールの指標の中でも、<strong>信頼度（Confidence）</strong>は、<strong>商品Xを購買した顧客が商品Yも購買する確率</strong>のことで、事象間の相関性を分析する基本指標となります。</p>



<p>一方で、前回に述べたとおり、リフトは1を下回ると負の影響力を意味するため、予め除外するのが通例ですが、pycspadeでは閾値設定ができないため1未満の系列パターンも含まれてしまっています。そこでリフトを1以上としてフィルタをかけます。右側の「合計（Lift）」フィルタの左側の最小値設定を1.0に変更すると、以下のように表示が切り替わります。ただし、初期ビューで見えている系列パターンはすべてリフトが1以上であるため、初期ビューの表示自体は変わりません。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4c-1024x594.png" alt="" class="wp-image-13898" width="480" height="279" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4c-1024x594.png 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4c-300x174.png 300w, https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4c-768x445.png 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>信頼度の降順に見ていくと、まず最後に商品カテゴリIDが「9」すなわち「エレクトロニクス・コンピューター」を購買しているパターンが多いことが一目瞭然となります。さらに、その前に「4」すなわち「家庭・ガーデニング用品」を購買しているパターンが多いこともわかります。</p>



<p>これらの原因はわかりませんが、とにかくこのパターンで購買商品カテゴリが変化している購買行動パターンが多いという事実が可視化され、把握することが可能となるわけです。</p>



<h2><strong>対象ユーザーを抽出して観察。</strong></h2>



<p>最後に、獲得した行動パターンに基づいて、観察対象とする<strong>ユーザーを抽出し、行動を観察</strong>します。すなわち<strong>データエスノグラフィ（Data Ethnography）</strong><sup id="footnote_plugin_tooltip_1" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_1');">1)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_1"><a href="https://uxmeetsdata.com/data-ethnography/">データエスノグラフィって？</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_1").tooltip({		tip: "#footnote_plugin_tooltip_text_1",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>を行うわけです。UXモデリングにより獲得したモデルは、あくまで機械的に抽出された行動パターンに過ぎません。ユーザーの行動の因果関係を把握し、意思決定プロセスを理解するには、やはり一人ひとりの行動データをミクロ視点で観察し、時系列に追う必要があります。UXモデリングはそれを効率化する手法という位置付けです。</p>



<p>とはいえ、抽出したパターンに一対一で紐づく会員のリストを得ることができないため、系列パターンに含まれる商品カテゴリを購買履歴に含む会員を抽出し、その中からサンプリングしつつ観察するというアプローチをとることにします。</p>



<p>指定した商品カテゴリを購買履歴に含む会員を抽出しやすいようにデータを加工します。BigQueryのクエリエディタに以下のSQL文を入力し、青い［実行］ボタンをクリックしてみましょう。また、このクエリ結果をデータセット「XM」に「sum_orders_ptn」という名前で保存します。</p>



<script src="https://gist.github.com/crosshack/0f8f2e4782dc1b00202c6783d3ce8e86.js"></script>



<p>続いて、テーブル「sum_orders_ptn」をTableauに取り込んでデータエスノグラフィをします。ワークシート編集画面で「A00_member_id」を［行］、「C01_frequency」「C02_monetary」を［列］、「C00_rank」を［フィルター］と［色］に、それぞれドラッグ＆ドロップすると、データエスノグラフィ環境の構築は完了です。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4d-1024x593.png" alt="" class="wp-image-13914" width="480" height="277" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4d-1024x593.png 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4d-300x174.png 300w, https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4d-768x445.png 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>ここで、さきほどの系列パターン分析で注目した、商品カテゴリ「4」と「9」を含む会員IDを抽出して行動データを観察できるようにします。それには「D00_category_ptn」をフィルターに追加し、［フィルターの編集］から［フィルター］モーダルを立ち上げ、［条件］タブの［式設定］にて、以下のフィルター条件を指定します。なおこれは、「D00_category_ptn」カラムに「4」と「9」のどちらも含む会員IDに絞り込むことを意味します。</p>



<pre class="wp-block-preformatted">CONTAINS([D00_category_ptn],'4') 
AND CONTAINS([D00_category_ptn],'9')</pre>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4e-899x1024.png" alt="" class="wp-image-13915" width="320" height="363"/></figure></div>



<p>絞り込まれた会員IDから任意に選んで、実際の購買履歴データを見てみましょう。例えば会員ID「16360」の会員の購買履歴はこのようになっています。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4f-1024x426.png" alt="" class="wp-image-13916" width="480" height="199" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4f-1024x426.png 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4f-300x125.png 300w, https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_4f-768x320.png 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>確かに「家庭・ガーデニング用品」関連商品の購入から始まり、次の訪問時に「エレクトロニクス・コンピューター」関連商品の購入をしています。さらにサブカテゴリを見ると、「カー・エレクトロニクス」関連商品が共通項として見られます。またその二年後には「赤ちゃん向けおもちゃ」関連商品を購入しています。このあたりにライフステージの変化のヒントがあるように考えられます。</p>



<p>このようにUXモデリングは、大量のデータから、<strong>系列パターンというシンプルなユーザー行動モデルを機械的に抽出</strong>し、<strong>観察すべきユーザーの絞り込みを効率化する手法</strong>であることを理解してもらえたのではないかと思います。</p>
]]></content:encoded>
										</item>
	<item>
		<title>UXモデリング入門 #03</title>
		<link>https://uxmeetsdata.com/ux-modeling-howto-03/</link>
				<pubDate>Fri, 30 Aug 2019 11:00:39 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[UX Modeling]]></category>
		<category><![CDATA[Association Analysis]]></category>
		<category><![CDATA[Data Mining]]></category>
		<category><![CDATA[UX Modeling]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=13808</guid>
				<description><![CDATA[モデリング用のデータを準備。 まずはBigQueryでモデリング用のテーブルを作成します。なお、ここでは系列パ...<p class="more-link"><a href="https://uxmeetsdata.com/ux-modeling-howto-03/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm-e1570601392622-1024x512.jpeg" alt="" class="wp-image-13638" width="480" height="240"/></figure></div>



<h2><strong>モデリング用のデータを準備。</strong></h2>



<p>まずはBigQueryでモデリング用のテーブルを作成します。なお、ここでは<strong>系列パターンマイニング（Sequential Pattern Mining：SPM）</strong>の代表的なアルゴリズムである<strong>CSPADE</strong>を使用しますが、それには<strong>会員IDと購買単位ごとの購買商品カテゴリIDの配列をもつテーブル</strong>が必要になります。購買単位とは一回の購買を意味し、通常は買い物かごを指しますが、今回のデータには買い物かごに相当するものが存在しないため、同じ日付の購買を一回の購買とみなすことにします。</p>



<p>また、今回の商品マスタには商品カテゴリIDに相当するものが存在しないため、以下のようにIDを定義して付与します。なお、IDは本来は整数で扱うべきですが、後ほど使用するPythonのデータ分析用拡張モジュールである「<strong>pandas</strong>」においてBigQueryデータの読み込みがうまく処理されないため、文字列で定義します。</p>



<table style="table-layout: fixed; width: 100%;">
<tr style="color: #fff; background-color: #000;">
<td style="width: 100px;">商品カテゴリID</td>
<td style="width: 200px;">商品カテゴリ名</td>
</tr>
<tr>
<td style="background-color: #eee;">1</td>
<td>ファッション・ジュエリー</td>
</tr>
<tr>
<td style="background-color: #eee;">2</td>
<td>おもちゃ・子供・赤ちゃん</td>
</tr>
<tr>
<td style="background-color: #eee;">3</td>
<td>スポーツ・アウトドア</td>
</tr>
<tr>
<td style="background-color: #eee;">4</td>
<td>家庭・ガーデニング用品</td>
</tr>
<tr>
<td style="background-color: #eee;">5</td>
<td>美容・健康・食料品</td>
</tr>
<tr>
<td style="background-color: #eee;">6</td>
<td>本・聞く本</td>
</tr>
<tr>
<td style="background-color: #eee;">7</td>
<td>自動車・工業</td>
</tr>
<tr>
<td style="background-color: #eee;">8</td>
<td>映画・音楽・ゲーム</td>
</tr>
<tr>
<td style="background-color: #eee;">9</td>
<td>エレクトロニクス・コンピューター</td>
</tr>
</table>



<p>BigQueryのクエリエディタに以下のSQL文を入力し、青い［実行］ボタンをクリックしてみましょう。</p>



<script src="https://gist.github.com/crosshack/ec305467b8af7ab09b57362dbd7c09f2.js"></script>



<p>なお、処理の効率化のために<strong>10%のサンプリング</strong>をしていますが［※1］、これは会員IDを10で割った剰余が0の場合に限定するという意味です。また、<strong>欠損</strong>を除外するために性別がNULLでない会員に限定し［※2］、年齢の<strong>異常値</strong>を除外するために10歳以上90歳未満の会員に限定しています［※3］。さらに、<strong>時系列データの開始と終了の問題</strong>を解決するために、初回購買日が2006年1月以後かつ最終購買日が2012年12月以前の会員に限定しています［※4］。</p>



<p>すると、以下のスキーマのテーブルが出力結果で表示されるので、それをデータセット「XM」に「sum_visits」という名前で保存します。</p>



<table style="table-layout: fixed; width: 100%;">
<tr style="color: #fff; background-color: #000;">
<td>フィールド名</td>
<td>概要</td>
<td>タイプ</td>
</tr>
<tr>
<td style="background-color: #eee;">member_id</td>
<td>会員ID</td>
<td>整数</td>
</tr>
<tr>
<td style="background-color: #eee;">visit_id</td>
<td>訪問ID</td>
<td>整数</td>
</tr>
<tr>
<td style="background-color: #eee;">category_id</td>
<td>商品カテゴリID</td>
<td>文字列の配列</td>
</tr>
</table>



<h2><strong>モデリング用の実行環境を準備。</strong></h2>



<p>続けて、Cloud DatalabでSPMによるアソシエーションルールを作成するための実行環境を準備します。とはいえCloud Datalabには、GCP（Google Cloud Platform）との連携や、メジャーなデータ分析・機械学習系の拡張モジュールがあらかじめインストールされているため、多くはインポートするだけです。</p>



<p>まずはデータ分析用の拡張モジュールである「<strong>pandas</strong>」をインポートします。これはBigQueryから取り込んだ分析用テーブルをデータブレームで操作するためですが、同時にBigQueryとの直接クエリによる連携も可能となります。</p>



<p>また、ここでは<strong>SPM</strong>の代表的なアルゴリズムである<strong>CSPADE</strong>のPython向け拡張モジュールである「<strong>pycspade</strong>」を使用しますが、Cloud Datalabにはインストールされていないため、追加インストールを行います。</p>



<p>ここまでの拡張モジュールの準備は、以下のコードで行うことが可能です。入力エリアに記述し、実行してみてください。</p>



<script src="https://gist.github.com/crosshack/35a7b3b19145aca9d620072bd724d3b2.js"></script>



<p>拡張モジュールの準備が完了したら、BigQueryで作成した分析用テーブルを取り込みます。それには「read_gbq」関数を使い、引数にBigQueryのクエリを実行するSQL文とGCPのプロジェクトIDを指定します。以下のコードを入力エリアに記述し、実行してみてください。</p>



<script src="https://gist.github.com/crosshack/43e96c47035b19946d1304a84f70ce55.js"></script>



<p>なお、商品カテゴリIDについては、先述の理由で文字列型で設定していましたが、ここで整数型に変換します。これでSPMによるアソシエーションルールを抽出するためのデータおよび環境が整いました。</p>



<h2><strong>アソシエーションルールを作成。</strong></h2>



<p>では、<strong>CSPADEアルゴリズム</strong>の拡張モジュールである<strong>pycspade</strong>を用いて、系列パターンのアソシエーションルールの作成を行います。プログラム内容の詳細な説明はここでは割愛しますが、以下のようなコードで実現できます。入力エリアに記述し、実行してみてください。</p>



<script src="https://gist.github.com/crosshack/c93aca6e68a82933db59fd010d23c335.js"></script>



<p>なお、<strong>アソシエーションルール（Association Rule）</strong>の詳細の説明は「<a href="https://uxmeetsdata.com/association-howto-01/">アソシエーション分析入門 #01</a>」に譲りますが、簡単に言えば「商品Xを購入した顧客は商品Yも購入している」といった規則性のことで、信頼度・支持度・リフトの三つの指標を使うのが一般的です。</p>



<p><strong>信頼度（Confidence）</strong>は、<strong>商品Xを購買した顧客が商品Yも購買する確率</strong>のことで、併売戦略やレコメンデーションにむけた分析の基本指標となります。</p>



<p><strong>支持度（Support）</strong>は、<strong>全体の購買の中で商品Xと商品Yのどちらも購買される確率</strong>のことで、補足指標となります。仮に、商品Xを購買した顧客が商品Yも購買する確率（信頼度）が80%だったとしても、商品Xと商品Yのいずれも購買した顧客が全体の1%にも満たない場合、統計的な信頼性が低いだけでなく、それをもとに併売戦略を立てたところでビジネス的に意味はありません。そこで補足指標として支持度を用います。</p>



<p><strong>リフト（Lift）</strong>は、<strong>全体の購買の中で商品Yが購買される確率</strong>に対する商品Xを購買した顧客が商品Yも購買する確率（<strong>信頼度</strong>）の割合のことで、こちらも補足指標となります。仮に、商品Xを購買した顧客が商品Yも購買する確率（信頼度）が80%だったとしても、そもそも商品Yが購買される確率が80%であれば、商品Xの購買が商品Yの購買に与える影響力を説明することはできません。そこで補足指標としてリフトを用います。</p>



<p>ところで、分析作業の効率化のために、リフトが閾値（1が一般的）を下回る組み合わせは、事前に分析対象から除外するのが慣例ですが、pycspadeではリフトの閾値設定ができません。一方で、支持度の閾値設定は可能であるため「0.05」を指定しています。</p>



<p>最後の行の「df_table」というデータフレーム型の変数に、作成したアソシエーションルールが格納されています。入力エリアに「df_table」と記述して実行してみましょう。すると以下のような表が出力されます。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_3a.png" alt="" class="wp-image-13862" width="240" height="264" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_3a.png 632w, https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm_3a-272x300.png 272w" sizes="(max-width: 240px) 100vw, 240px" /></figure></div>



<p>上表の列「Sequence」は系列パターンすなわち購買商品カテゴリの時系列パターン、「Confidence」は信頼度、「Support」は支持度、「Lift」はリフトとなります。例えば、Sequenceが「(7)-(9)」とは、「自動車・工業」関連商品を購入後に、「エレクトロニクス・コンピューター」関連商品を購入した、という系列パターンであり、その信頼度・支持度・リフトは、それぞれ「0.38308」「0.090715」「0.976826」という意味になります。この状態でもアソシエーションルールの一部は見てとれますが、より分析をしやすくするためにTableauで可視化することにします。</p>



<p>次回は、作成したアソシエーションルールをBigQueryに書き出し、Tableauで可視化しながら、系列パターンの分析と、観察対象とする<strong>ユーザーの抽出と行動観察</strong>を行います。</p>
]]></content:encoded>
										</item>
	<item>
		<title>UXモデリング入門 #02</title>
		<link>https://uxmeetsdata.com/ux-modeling-howto-02/</link>
				<pubDate>Thu, 29 Aug 2019 11:00:17 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[UX Modeling]]></category>
		<category><![CDATA[Association Analysis]]></category>
		<category><![CDATA[Data Mining]]></category>
		<category><![CDATA[UX Modeling]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=13746</guid>
				<description><![CDATA[SPMによるUXモデリング。 頻出する事象の組み合わせを抽出する手法を総称して頻出パターンマイニング（Freq...<p class="more-link"><a href="https://uxmeetsdata.com/ux-modeling-howto-02/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm-e1570601392622-1024x512.jpeg" alt="" class="wp-image-13638" width="480" height="240"/></figure></div>



<h2><strong>SPMによるUXモデリング。</strong></h2>



<p>頻出する事象の組み合わせを抽出する手法を総称して<strong>頻出パターンマイニング（Frequent pattern mining）</strong>といいます。その代表的な手法が<strong>アソシエーション分析（Association Analysis）</strong><sup id="footnote_plugin_tooltip_1" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_1');">1)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_1"><a href="https://uxmeetsdata.com/association-howto-01/">アソシエーション分析入門</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_1").tooltip({		tip: "#footnote_plugin_tooltip_text_1",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>であり、「商品Xを購買した顧客は商品Yも購買している」というような向きのある相関関係を得られることが特徴ですが、一方で時系列的な順序が考慮されないという欠点があります。</p>



<p>アソシエーション分析の一種である<strong>バスケット分析（Basket Analysis）</strong>は、文字通り同じ買物かごに含まれる商品の組み合わせのパターンを分析する手法ですが、このように&#8221;<strong>同時</strong>&#8220;に発生する事象については問題ないものの、複数回の買物で購買商品がどのように推移したかというような、時系列の概念を含むパターンを分析することには向かないわけです。</p>



<p>そこで、時系列を考慮した頻出パターンマイニングである<strong>系列パターンマイニング（Sequential Pattern Mining：SPM）</strong>が、1995年にIBM研究所のR.AgrawalとR.Srikantによって提唱されました。また、このSPMがUXモデリングの比較的簡単なアプローチのひとつとして適用可能であることは、前回の「<a href="http://ux-modeling-howto-01">UXモデリング入門 #01</a>」で説明した通りです。</p>



<p>そこで今回は、SPMを使ったUXモデリング実践の入門編をご紹介したいと思います。なお、分析ツールは<strong>Google BigQuery</strong>、<strong>Tableau Desktop</strong>、<strong>Google Cloud Datalab</strong>の三つを用いて進めます。それぞれについては「<a href="https://uxmeetsdata.com/bigquery-sql-01/">BigQueryではじめるSQL</a>」「<a href="https://uxmeetsdata.com/tableau-bi-01/">TableauではじめるBI</a>」「<a href="https://uxmeetsdata.com/association-howto-02/">アソシエーション分析入門 #02</a>」を参照してください。</p>



<h2><strong>UXモデリングの手順。</strong></h2>



<p>UXモデリングは以下の手順で進めます。</p>



<ol><li>分析の<strong>背景の整理</strong>と<strong>目的の明確化</strong></li><li><strong>データ準備</strong>と<strong>基礎分析</strong></li><li>行動パターンの<strong>モデリング</strong></li><li>対象ユーザーの<strong>抽出と観察</strong></li></ol>



<p>データ分析に限らず、何らかの課題解決をするには、まずその<strong>背景を整理し、目的を明確化する</strong>必要があります。当たり前の話ですが、失敗するデータ分析の多くは、ここをあいまいにしたまま、<strong>とにかく何らかの有用な知識を獲得したい</strong>という思いのみで行われており、時間とコストを浪費する結果となっています。</p>



<p>またデータは「存在する」状態と「分析できる」状態では全く異なります。そして多くのデータは分析することを目的に収集されておらず、そもそも<strong>構造化されていない</strong>、あるいは<strong>欠損・異常値・表記揺れ</strong>（同義だが異句の状態）を含むこともあります。それらを加工し「分析できる」状態にすることを<strong>データ準備（Data Preparation）</strong>といいます。</p>



<p>さらに、あまねく全てのデータを準備することはできないため、必然的に<strong>選択</strong>が行われ、<strong>偏り</strong>が必ず発生します。これを<strong>選択バイアス（Selection Bias）</strong>といいます。例えば、プリペイドカードの購買履歴には、カードの入金額の上限を超える高額商品の購買履歴がそもそも含まれていません。おそらくクレッジトカードなどの他の決済手段で購買しているのでしょう。このような偏りのあるデータで無邪気にRFM分析などを行うと、<strong>ミスリード（Misslead）</strong>を起こします。</p>



<p>選択バイアスを無くすことが理想ですが、現実には不可能であるため、データの全体像を俯瞰して<strong>分布と偏り</strong>を把握し、分析を進める上での前提条件として捉えておくことが重要です。その作業を<strong>基礎分析（Basic Analysis）</strong>といいます。</p>



<p>ここまで完了してようやくUXモデリングが実施可能となります。今回はUXモデリングの比較的簡単なアプローチとして<strong>系列パターンマイニング（Sequential Pattern Mining：SPM）</strong>を用い、時系列を考慮したユーザーの典型的な行動パターンをモデリングします。</p>



<p>最後に、獲得した行動パターンに基づいて、観察対象とする<strong>ユーザーを抽出し、行動を観察</strong>します。すなわち<strong>データエスノグラフィ（Data Ethnography）</strong><sup id="footnote_plugin_tooltip_2" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_2');">2)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_2"><a href="https://uxmeetsdata.com/data-ethnography/">データエスノグラフィって？</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_2").tooltip({		tip: "#footnote_plugin_tooltip_text_2",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>を行うわけです。UXモデリングにより獲得したモデルは、あくまで機械的に抽出された行動パターンに過ぎません。ユーザーの行動の因果関係を把握し、意思決定プロセスを理解するには、やはり一人ひとりの行動データをミクロ視点で観察し、時系列に追う必要があります。UXモデリングはそれを効率化する手法という位置付けです。</p>



<h2><strong>購買商品の時系列変化を捉える。</strong></h2>



<p>では、UXモデリングの実践を進めて行きましょう。まずは分析の<strong>背景の整理</strong>と<strong>目的の明確化</strong>を行います。</p>



<p>今回は「<a href="https://uxmeetsdata.com/data-ethnography-howto-01/">データエスノグラフィ入門</a>」と連動し、総合ECサイトの会員の<strong>購買商品の時系列変化のパターン</strong>を捉え、優良化のヒントを獲得するという設定で進めます。分析対象データは、とある総合ECサイトの会員の購買履歴データとし、概要は以下のとおりです。</p>



<ul><li>種類：総合ECサイトの会員の購買履歴</li><li>期間：2005年1月〜2013年12月（9年間）</li><li>会員数：639,777人</li><li>購買数：7,599,650件（平均11.9件/人）</li></ul>



<p>データソースは以下の３つを使用します。なお、こちらはすでにBigQueryに投入済みとします。また、データセット名とテーブル名は任意ですが、ここでは「データエスノグラフィ入門」と合わせるため、データセット名を「DE」、テーブル名はファイル名をそのまま設定します。</p>



<table style="table-layout: fixed; width: 100%;">
<tbody>
<tr style="color: #fff; background-color: #000;">
<td>データソース</td>
<td>変数</td>
<td>ダウンロード</td>
</tr>
<tr>
<td style="background-color: #eee;">会員マスタ<br>mst_members</td>
<td>会員ID, 年齢, 性別, 居住地など</td>
<td><a href="https://storage.googleapis.com/xmdcom-data/data-ethnography/mst_members.csv">［↓］105MB﻿</td>
</tr>
<tr>
<td style="background-color: #eee;">商品マスタ<br>mst_products</td>
<td>商品ID, 商品カテゴリなど</td>
<td><a href="https://storage.googleapis.com/xmdcom-data/data-ethnography/mst_products.csv">［↓］53MB</td>
</tr>
<tr>
<td style="background-color: #eee;">購買履歴<br>trx_orders</td>
<td>会員ID, 商品ID, 注文日, 価格</td>
<td><a href="https://storage.googleapis.com/xmdcom-data/data-ethnography/trx_orders.csv">［↓］698MB</td>
</tr>
</tbody>
</table>



<p>これらのデータを使用し、<strong>ユーザーの購買商品の時系列変化の典型的なパターン</strong>をモデリングして行きます。なお、データ準備と基礎分析のプロセスは「<a href="https://uxmeetsdata.com/data-ethnography-howto-02/">データエスノグラフィ入門 #02</a>」と同様であるためここでは割愛し、次回は行動データのモデリングの実践を行います。</p>
]]></content:encoded>
										</item>
	<item>
		<title>UXモデリング入門 #01</title>
		<link>https://uxmeetsdata.com/ux-modeling-howto-01/</link>
				<pubDate>Wed, 28 Aug 2019 11:00:56 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[UX Modeling]]></category>
		<category><![CDATA[Association Analysis]]></category>
		<category><![CDATA[Data Mining]]></category>
		<category><![CDATA[UX Modeling]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=13639</guid>
				<description><![CDATA[行動パターンを発見する。 ユーザーの行動データから、購買の意思決定プロセスを把握したい、あるいは、思いもよらな...<p class="more-link"><a href="https://uxmeetsdata.com/ux-modeling-howto-01/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/10/xmd_xm-e1570601392622-1024x512.jpeg" alt="" class="wp-image-13638" width="480" height="240"/></figure></div>



<h2><strong>行動パターンを発見する。</strong></h2>



<p>ユーザーの行動データから、購買の<strong>意思決定プロセス</strong>を把握したい、あるいは、<strong>思いもよらないニーズ</strong>を発見したい。多くのマーケターやビジネスパーソンにとって、それはデータ活用におけるもっとも重要な関心ごとのひとつでしょう。</p>



<p>あるコンテンツXの閲覧（事象X）と、ある商品Yの購買（事象Y）には、強い共起性があるから、事象Yの意思決定に事象Xがなんらか関与している可能性が高いのではないか。そのような分析はよく行われることと思います。</p>



<p>一方で、<strong>事象Xと事象Yの因果関係</strong>の説明は難しい問題です。事象Xによる気持ちの変化があったから事象Yにいたったのか、最初から事象Yが起こることは決まっていて、たまたま事象Xをしただけなのかが判別しづらいからです。</p>



<p>因果関係を説明するには、まず<strong>時間の関係</strong>を把握することが必要です。当たり前ですが、原因と結果の前後が入れ替わることはありません。また、事象Xと事象Yの間に大きな時間の隔たりがある場合は因果関係を説明しづらくなります。加えて、<strong>事象Xが事象Yの発生に影響を与えている</strong>ことも重要です。事象Xの有無に関わらず事象Yが起こるのであれば、因果関係は説明しづらくなります。</p>



<p>ユーザーの行動の因果関係を把握し、意思決定プロセスを理解するのに、一人ひとりの行動データをミクロ視点で観察し、時系列に追う<strong>データエスノグラフィ（Data Ethnography）</strong><sup id="footnote_plugin_tooltip_1" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_1');">1)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_1"><a href="https://uxmeetsdata.com/data-ethnography/">データエスノグラフィって？</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_1").tooltip({		tip: "#footnote_plugin_tooltip_text_1",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>という手法が有用であることは「<a href="https://uxmeetsdata.com/data-ethnography/">データエスノグラフィって？</a>」でも触れたとおりです。とはいえ、大量のデータから観察すべきユーザーを特定し、典型的な行動パターンを見つけることは容易ではありません。</p>



<h2><strong>シンプルな行動モデルを取り出す。</strong></h2>



<p>そこで、大量のデータから<strong>ユーザーの行動モデルを機械的に取り出す</strong>手法が有効となります。<a href="https://www.crosshack.jp">クロスハック</a>ではこれをUXモデリング（UX Modeling）<sup id="footnote_plugin_tooltip_2" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_2');">2)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_2"><a href="https://uxmeetsdata.com/ux-modeling/">UXモデリングって？</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_2").tooltip({		tip: "#footnote_plugin_tooltip_text_2",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>と呼んでいます。</p>



<p>大量データをモデリングする手法として真っ先に思いつくのは、<strong>機械学習（Machine Learning）</strong><sup id="footnote_plugin_tooltip_3" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_3');">3)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_3"><a href="https://uxmeetsdata.com/machine-learning/">いまさら聞けない機械学習</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_3").tooltip({		tip: "#footnote_plugin_tooltip_text_3",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>でしょう。とりわけ<strong>深層学習（Deep Learning）</strong><sup id="footnote_plugin_tooltip_4" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_4');">4)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_4"><a href="https://uxmeetsdata.com/deep-learning/">いまさら聞けない深層学習</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_4").tooltip({		tip: "#footnote_plugin_tooltip_text_4",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>は、特徴表現を自動的に行うため、大量データのモデリングには極めて有効です。</p>



<p>一方で、「<a href="https://uxmeetsdata.com/ux-modeling/">UXモデリングって？</a>」でも触れたとおり、深層学習には<strong>導出されたモデルが複雑化・ブラックボックス化する</strong>という欠点があります。複雑でブラックボックス化されたモデルは、解釈や説明ができません。解釈や説明ができないモデルは、ビジネスやデザインの意思決定に応用することができず、役に立ちません。UXモデリングでは、複雑なユーザー行動から<strong>解釈や説明をしやすいシンプルで汎用性のあるモデル</strong>を取り出すことが重要です。</p>



<h2><strong>時系列のアソシエーション分析。</strong></h2>



<p>ユーザーの行動データから行動パターンを取り出す手法の一つに、アソシエーション分析があります。<strong>アソシエーション分析（Association Analysis）</strong><sup id="footnote_plugin_tooltip_5" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_5');">5)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_5"><a href="https://uxmeetsdata.com/association-howto-01/">アソシエーション分析入門</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_5").tooltip({		tip: "#footnote_plugin_tooltip_text_5",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>は、事象Xと事象Yの事象間の相関性を分析する手法で、<strong>データマイニング（Data Mining）</strong><sup id="footnote_plugin_tooltip_6" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_6');">6)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_6"><a href="https://uxmeetsdata.com/data-mining/">再考するデータマイニング</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_6").tooltip({		tip: "#footnote_plugin_tooltip_text_6",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>の中核をなす分析手法のひとつです。</p>



<p>アソシエーション分析の詳細は「<a href="https://uxmeetsdata.com/association-howto-01/">アソシエーション分析入門</a>」に譲りますが、簡単に言うと、それにより得られるのは<strong>向きのある相関関係</strong>です。向きのある相関関係とは、例えば「商品Xを購買した顧客は商品Yも購買している」というようなものです。ただし、これはあくまで相関関係であり、因果関係を証明するものではありません。しかしながら、これをきっかけに<strong>因果推論（Causal Inference）</strong><sup id="footnote_plugin_tooltip_7" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_7');">7)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_7"><a href="https://uxmeetsdata.com/causal-inference/">いまさら聞けない因果推論</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_7").tooltip({		tip: "#footnote_plugin_tooltip_text_7",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>や<strong>ベイズ推定（Bayesian Inference）</strong><sup id="footnote_plugin_tooltip_8" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_8');">8)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_8"><a href="https://uxmeetsdata.com/bayesian-inference/">いまさら聞けないベイズ推定</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_8").tooltip({		tip: "#footnote_plugin_tooltip_text_8",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>などを行うことで因果関係を明らかにする可能性が高まります。</p>



<p>ところで、アソシエーション分析は事象間の相関性を分析する手法の総称であり、特定の分析手法をさすものではありません。共起性に基づく分析手法が一般的ですが、他にも<strong>ニューラルネットワーク（Neural Network）</strong>などを用いたアプローチもあります。また、共起性に基づく手法の中でも最もよく利用されるものに<strong>アプリオリ（Apriori）</strong>というアルゴリズムがあります。「<a href="https://uxmeetsdata.com/association-howto-01/">アソシエーション分析入門</a>」では、このアプリオリ・アルゴリズムを使った分析方法を解説しました。</p>



<p>一方で、アプリオリ・アルゴリズムを中心とした一般的なアソシエーション分析では、時間の関係が無視されます。例えば「商品Xを購買した顧客は商品Yも購買している」というのは、時系列的に商品Xと商品Yのどちらが先かは問われず、また商品Xと商品Yの購買の時間間隔も考慮されていません。</p>



<p>冒頭でも述べたとおり、因果関係の説明には時系列的順序や時間間隔といった時間の関係が極めて重要な要素となります。また、時間の関係がわからないと、次に発生するユーザー行動を予測することができません。そこで、時間の概念を考慮したアソシエーション分析が必要となります。それを<strong>系列パターンマイニング（Sequential Pattern Mining：SPM）</strong>といいます。</p>



<p>そこで、この「UXモデリング入門」では、UXモデリングの比較的簡単なアプローチのひとつとして、このSPMを用いた手法をご紹介します。次回以降で、その具体的なプロセスに触れて行きます。</p>
]]></content:encoded>
										</item>
	<item>
		<title>アソシエーション分析入門 #04</title>
		<link>https://uxmeetsdata.com/association-howto-04/</link>
				<pubDate>Thu, 09 May 2019 11:31:24 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Association Analysis]]></category>
		<category><![CDATA[Cloud Datalab]]></category>
		<category><![CDATA[Data Mining]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=9195</guid>
				<description><![CDATA[アソシエーションルールを可視化。 Cloud Datalabにてアプリオリ・アルゴリズムの拡張モジュールである...<p class="more-link"><a href="https://uxmeetsdata.com/association-howto-04/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso-e1557133653236.jpg" alt="" class="wp-image-8365" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso-e1557133653236.jpg 650w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso-e1557133653236-300x150.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<h2><strong>アソシエーションルールを可視化。</strong></h2>



<p>Cloud Datalabにてアプリオリ・アルゴリズムの拡張モジュールであるmlxtendを用いて作成したアソシエーションルールを、BigQueryに書き出し、Tableauで可視化しながらアソシエーション分析を行います。</p>



<p>まずは前回の続きで、以下のコードを入力エリアに記述し、実行してみましょう。なお「to_gbq」関数の引数には、アソシエーションルールを格納したデータフレーム、書き込み先のテーブル名、GCPのプロジェクトIDを指定します。</p>



<script src="https://gist.github.com/crosshack/c431def97ce78d060c4809683f86b810.js"></script>



<p>なお、BigQueryへの書き出しがうまく行かない場合は、以下のコードでCSVファイルに書き出し、GCS（Google Cloud Storage）経由でBigQueryに取り込みます。</p>



<script src="https://gist.github.com/crosshack/597eabd43b450cf9ab5c7e3ea473e729.js"></script>



<p>以下のように、BigQueryのデータセット「DE」の中に「sum_rules_aso」というテーブルが作成されていることを確認します。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4a-e1557620107706-1024x560.jpg" alt="" class="wp-image-9201" width="480" height="262" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4a-e1557620107706-1024x560.jpg 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4a-e1557620107706-300x164.jpg 300w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4a-e1557620107706-768x420.jpg 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>続いて、テーブル「sum_rules_aso」をTableauに取り込んで分析します。Tableau Desktopであれば、スタート画面の［接続］にあるメニュー［Google BigQuery］から選択するだけでシームレスに連携できます。Tableau Publicであれば、GCS（Google Cloud Storage）経由でCSVファイルとしてエクスポートしてから取り込みます。</p>



<p>Tableauへの取り込みが完了したら、以下の手順でクロス集計表を作成し、アソシエーションルールを可視化します。</p>



<ol><li>フィールドの「X」を［行］、「Y」を［列］シェルフにそれぞれドラッグ＆ドロップ。</li><li>フィールドの「Confidence」を［マーク］カードの［色］にドラッグ＆ドロップ。</li><li>［マーク］カードのプルダウンで［四角］を選択。</li><li>右上に表示される「合計（Confidence）」カードの右上の▼のメニューで［色の編集&#8230;］を選択。</li><li>［色の編集］モーダルで［ステップド カラー］チェックをオン、［詳細］ボタン押下で表示される［中央］チェックをオンに設定。</li><li>フィールドの「Confidence」「Support」「Lift」を順に［マーク］カードの［テキスト］にドラッグ＆ドロップ。</li><li>フィールドの「Confidence」「Support」「Lift」のそれぞれについて、ピルの右端の▼のメニューで［フィルタを表示］を選択。</li></ol>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4b-e1558046241575-1024x586.jpg" alt="" class="wp-image-9207" width="480" height="274" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4b-e1558046241575-1024x586.jpg 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4b-e1558046241575-300x172.jpg 300w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4b-e1558046241575-768x440.jpg 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4c-e1557533671536.jpg" alt="" class="wp-image-9226" width="240" height="256" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4c-e1557533671536.jpg 878w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4c-e1557533671536-282x300.jpg 282w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4c-e1557533671536-768x817.jpg 768w" sizes="(max-width: 240px) 100vw, 240px" /></figure></div>



<h2><strong>事象間の相関性を分析。</strong></h2>



<p>では、この表をもとに事象間の相関性を分析してみましょう。「<a href="https://uxmeetsdata.com/association-howto-01/">アソシエーション分析入門 #01</a>」でも触れたとおり、アソシエーションルールの指標の中でも、<strong>信頼度（Confidence）</strong>は、<strong>商品Xを購買した顧客が商品Yも購買する確率</strong>のことで、事象間の相関性を分析する基本指標となります。</p>



<p>とはいえこのままでは「X」「Y」の項目数が多く、分析しやすい状態とは言えません。これは支持度の閾値設定が低すぎることによるものです。<strong>支持度（Support）</strong>は、<strong>全体の購買の中で商品Xと商品Yのどちらも購買される確率</strong>のことで、アソシエーションルール作成時点では閾値を0.1に設定しましたが、少し上げることにします。右側の「合計（Support）」のフィルタからわかるとおり、支持度は0.1003から0.3910までの分布となっています。そこで左側の最小値設定を0.2に変更すると、以下のように表示が切り替わります。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4d-e1558046814540-1024x586.jpg" alt="" class="wp-image-9247" width="480" height="274" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4d-e1558046814540-1024x586.jpg 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4d-e1558046814540-300x172.jpg 300w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4d-e1558046814540-768x440.jpg 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>ここで、ある特徴に気づきます。まず列方向に見ると「エレクトロニクス・コンピューター」「家庭・ガーデニング用品」「スポーツ・アウトドア」が軒並み高い信頼度となっています。次に行方向に見ると、さきほどの三つの商品カテゴリが軒並み低い信頼度となっています。</p>



<p>これは、この三つの商品カテゴリが<strong>他の商品との併売が強い</strong>ことを意味しています。ただ注意したいのは、下図のとおり他の商品カテゴリと比較して、そもそもの購買件数が多いということです。このように、支持度には発生件数が多い事象を上位にスコアリングしてしまう特性があります。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4e-1024x613.png" alt="" class="wp-image-9267" width="480" height="288" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4e-1024x613.png 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4e-300x180.png 300w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4e-768x460.png 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<h2><strong>成功確率が高い提案。</strong></h2>



<p>そこで注目するのがリフトです。<strong>リフト（Lift）</strong>は、<strong>全体の購買の中で商品Yが購買される確率</strong>に対する、商品Xを購買した顧客が商品Yも購買する確率（<strong>信頼度</strong>）の割合で、商品Xの購買が商品Yの購買に与える影響力の強さを示します。</p>



<p>これにより、ただ商品Yの購買件数が多いからではなく、商品Xの購買に影響を受けて信頼度が高くなった組み合わせを抽出することができます。右側の「合計（Lift）」のフィルタからわかるとおり、リフトは1.077から3.920までの分布となっています。そこで左側の最小値設定を1.3に変更すると、以下のように表示が切り替わります。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4f-e1558046840946-1024x586.jpg" alt="" class="wp-image-9284" width="480" height="274" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4f-e1558046840946-1024x586.jpg 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4f-e1558046840946-300x172.jpg 300w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_4f-e1558046840946-768x440.jpg 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>行方向に見ると「自動車・工業」の信頼度・リフトがともに高く、「エレクトロニクス・コンピューター」「家庭・ガーデニング用品」「スポーツ・アウトドア」を中心とした他の商品カテゴリの購買を押し上げる力が強いことがわかります。</p>



<p>この結果から、新たな商品カテゴリの提案は、「自動車・工業」購買経験者に対し「エレクトロニクス・コンピューター」「家庭・ガーデニング用品」「スポーツ・アウトドア」を軸に購買経験のないカテゴリを提案することが最も併売の成功確率が高いことがわかります。</p>



<p>このように、アソシエーション分析により「商品Xを購買した顧客は商品Yも購買している」という<strong>向きのある相関関係</strong>を抽出することで、併売戦略のヒントやエビデンスを獲得することが可能となるわけです。</p>
]]></content:encoded>
										</item>
	<item>
		<title>アソシエーション分析入門 #03</title>
		<link>https://uxmeetsdata.com/association-howto-03/</link>
				<pubDate>Wed, 08 May 2019 11:58:41 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Association Analysis]]></category>
		<category><![CDATA[Cloud Datalab]]></category>
		<category><![CDATA[Data Mining]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=9066</guid>
				<description><![CDATA[新しい商品カテゴリの提案。 それでは、Cloud Datalabを利用した、Pythonによるアソシエーション...<p class="more-link"><a href="https://uxmeetsdata.com/association-howto-03/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso-e1557133653236.jpg" alt="" class="wp-image-8365" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso-e1557133653236.jpg 650w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso-e1557133653236-300x150.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<h2><strong>新しい商品カテゴリの提案。</strong></h2>



<p>それでは、Cloud Datalabを利用した、Pythonによるアソシエーション分析のプログラミングを実践していきます。</p>



<p>今回は「<a href="https://uxmeetsdata.com/data-ethnography-howto-01/">データエスノグラフィ入門</a>」と連動し、とある総合ECサイトの商品の併売傾向を深堀分析するという設定です。まず分析の背景と目的をおさらいします。</p>



<p>あなたは、とある総合ECサイトの責任者です。ECサイトでは、<strong>F2転換率</strong>が重要であると言われています。この”F”は<strong>購買頻度（Frequency）</strong>のことで、F2転換率とは初回購買から二回目購買への<strong>転換率（Conversion Rate）</strong>を意味します。一般的に、新規会員の獲得よりも、既存会員のリピート購買促進のほうがコスト効率が高いため、F2転換率は重要な指標となります。とはいえF2転換した会員が、その後も継続的に購買してくれる、いわゆる優良会員になるとは限りません。</p>



<p>そこで今回の分析目的を「<strong>優良化する会員の行動特性を、購買履歴データから把握する</strong>」とします。なおそこには、まだ<strong>優良化していな会員を意図的に優良化するためのヒント</strong>があることは言うまでもありません。</p>



<p>分析対象データは、とある総合ECサイトの会員の購買履歴データで、概要は以下のとおりです。</p>



<ul><li>種類：総合ECサイトの会員の購買履歴</li><li>期間：2005年1月〜2013年12月（9年間）</li><li>会員数：639,777人</li><li>購買数：7,599,650件（平均11.9件/人）</li></ul>



<p>データソースは以下の３つを使用します。なお、こちらはすでにBigQueryに投入済みとします。</p>



<table style="table-layout: fixed; width: 100%;">
<tr style="color: #fff; background-color: #000;">
<td>データソース</td>
<td>変数</td>
<td>ダウンロード</td>
</tr>
<tr>
<td style="background-color: #eee;">会員マスタ<br>mst_members</td>
<td>会員ID, 年齢, 性別, 居住地など</td>
<td><a href="https://storage.googleapis.com/xmdcom-data/data-ethnography/mst_members.csv">［↓］105MB﻿</td>
</tr>
<tr>
<td style="background-color: #eee;">商品マスタ<br>mst_products</td>
<td>商品ID, 商品カテゴリなど</td>
<td><a href="https://storage.googleapis.com/xmdcom-data/data-ethnography/mst_products.csv">［↓］53MB</td>
</tr>
<tr>
<td style="background-color: #eee;">購買履歴<br>trx_orders</td>
<td>会員ID, 商品ID, 注文日, 価格</td>
<td><a href="https://storage.googleapis.com/xmdcom-data/data-ethnography/trx_orders.csv">［↓］698MB</td>
</tr>
</table>



<p>すべてのユーザーの行動の観察はできないため、似たユーザーを<strong>セグメント（Segment）</strong>に<strong>分類</strong>し、観察すべきセグメントを<strong>選定</strong>します。優良化の要因となる行動特性を把握するには、<strong>優良化している会員</strong>と<strong>優良化していない会員</strong>との間に存在する違いを比較観察すればよいので、観察すべきセグメントとはその二つになりますが、もう少し絞り込むために<strong>優良化との相関が強い</strong>サブセグメントを見つけます。例えば、優良化と高齢者の相関が強ければ、高齢者同士で比較すれば違いを発見しやすくなるということです。</p>



<p><strong>優良化との相関が強い</strong>サブセグメントを見つけるには、まず二つの事象間の<strong>相関が仮説として想定されるもの</strong>について事実を検証していく<strong>検証的アプローチ（Verifying Approach）</strong>による分析を行います。今回の場合でいうと、特定の<strong>性別や年代</strong>、あるいは<strong>購買商品カテゴリ</strong>などの変数と優良化との間に相関があるという仮説を検証していきます。しかしながら、それらに相関がないことがわかりました。（※「<a href="https://uxmeetsdata.com/data-ethnography-howto-03/">データエスノグラフィ入門 #03</a>」を参照）一方で、行動データ観察を進める中で、<strong>購買商品カテゴリ数</strong>と優良化との間に相関があることがわかりました。（※「<a href="https://uxmeetsdata.com/data-ethnography-howto-04/">データエスノグラフィ入門 #04</a>」を参照）とりわけ購買商品カテゴリ数が8以上で優良会員の比率が大きく増えるため、そのサブセグメントに絞って行動データ観察をすると、優良化の要因となる行動特性を発見しやすくなると考えられます。</p>



<p>さらに、<strong>購買商品カテゴリ数</strong>と優良化の相関性は、<strong>新たな商品カテゴリを提案することが優良化につながる</strong>可能性を示唆しています。ただし、闇雲に提案するよりも、<strong>購買経験済みの商品カテゴリとの併売傾向が強い商品カテゴリ</strong>を提案するほうが効果が高いと考えられます。そこでアソシエーション分析によりそれを明らかにします。</p>



<h2><strong>分析用のデータと環境を準備。</strong></h2>



<p>まずはBigQueryで分析用のテーブルを作成します。アソシエーション分析では<strong>会員IDごとに購買商品カテゴリの変数を持つテーブル</strong>が必要になりますが、購買商品カテゴリの数は会員ごとに異なるため、<strong>ARRAY_AGG</strong>という集計関数を用いて配列型で集計します。BigQueryのクエリエディタに以下のSQL文を入力し、青い［実行］ボタンをクリックしてみましょう。また、このクエリ結果をデータセット「DE」に「sum_members_aso」という名前で保存します。なお併売傾向を捉えるには、購買商品カテゴリ数が複数である必要があるため、2以上の会員に限定しています［※1］。</p>



<script src="https://gist.github.com/crosshack/9a3a6e781fd9995ccb32b5fa4e1fccae.js"></script>



<p>続けて、Cloud Datalabでアソシエーションルールを作成するための実行環境を準備します。とはいえCloud Datalabには、GCP（Google Cloud Platform）との連携や、メジャーなデータ分析・機械学習系の拡張モジュールがあらかじめインストールされているため、多くはインポートするだけです。</p>



<p>まずはデータ分析用の拡張モジュールである「<strong>pandas</strong>」をインポートします。これはBigQueryから取り込んだ分析用テーブルをデータブレームで操作するためですが、同時にBigQueryとの直接クエリによる連携も可能となります。</p>



<p>また、アソシエーションルールの抽出ロジック自体は単純なため自作も可能ですが、大量データからの抽出には膨大な計算処理が必要となるため、高速化する<strong>アプリオリ（Apriori）</strong>というアルゴリズムを使用します。アプリオリを実装した拡張モジュールはいくつかありますが、いずれもCloud Datalabにはインストールされていないため、追加インストールが必要となります。今回は「<strong>mlxtend</strong>」という拡張モジュールを用います。インストールはpipコマンドで実施します。</p>



<p>ここまでの拡張モジュールの準備は、以下のコードで行うことが可能です。入力エリアに記述し、実行してみてください。</p>



<script src="https://gist.github.com/crosshack/89080b12dceeebca78aeb5d75f40960d.js"></script>



<p>拡張モジュールの準備が完了したら、BigQueryで作成した分析用テーブルを取り込みます。それには「read_gbq」関数を使い、引数にBigQueryのクエリを実行するSQL文とGCPのプロジェクトIDを指定します。以下のコードを入力エリアに記述し、実行してみてください。</p>



<script src="https://gist.github.com/crosshack/72807f21d8d1363435467cbead60b34d.js"></script>



<p>これでアソシエーションルールを抽出するための分析用のデータが整いました。</p>



<h2 id="mce_39"><strong>アソシエーションルールを作成。</strong></h2>



<p>では、アプリオリ・アルゴリズムの拡張モジュールであるmlxtendを用いて、アソシエーションルールの作成を行います。プログラム内容の詳細な説明はここでは割愛しますが、以下のようなコードで実現できます。入力エリアに記述し、実行してみてください。</p>



<script src="https://gist.github.com/crosshack/5cf74d4901f82e4cdfc0413237aa6a17.js"></script>



<p>なお「<a href="https://uxmeetsdata.com/association-howto-01/">アソシエーション分析入門 #01</a>」でも触れたとおり、分析の効率化のため、支持度とリフトについては、閾値を下回る組み合わせを事前に分析対象から除外します。ここでは支持度の閾値を0.1、リフトの閾値を1とします。プログラムでは「apriori()」関数の引数「min_support」が支持度の閾値の指定となるため「0.1」を代入します。また「association_rules()」関数の引数「metric」が閾値設定対象の指標の指定となるため「&#8221;lift&#8221;」を、同じく引数「min_threshold」がその閾値の指定となるため「1」を代入します。</p>



<p>最後の行の「df_table」というデータフレーム型の変数に、作成したアソシエーションルールが格納されています。入力エリアに「df_table」と記述して実行してみましょう。すると以下のような表が出力されます。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_3a-1024x498.jpg" alt="" class="wp-image-9128" width="480" height="232" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_3a-1024x498.jpg 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_3a-300x146.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>上表の列「X」「Y」は購買した商品カテゴリ、「Confidence」は信頼度、「Support」は支持度、「Lift」はリフトとなります。例えば、基本指標である商品カテゴリ「美容・健康・食料品」を購買した顧客が「エレクトロニクス・コンピューター」も購買する確率（信頼度）は0.70&#8230;で、補足指標である支持度は0.29&#8230;、リフトは1.13&#8230;となります。この状態でもアソシエーションルールの一部は見てとれますが、より分析をしやすくするためにTableauで可視化することにします。</p>



<p>次回は、作成したアソシエーションルールをBigQueryに書き出し、Tableauで可視化しながらアソシエーション分析を行います。</p>



<p>※参考までに、アソシエーションルールの作成をCloud DatalabではなくColabで行う場合のプログラムを以下に掲載しておきます。Cloud Datalabを利用できない方はこちらでお試しください。</p>



<script src="https://gist.github.com/crosshack/c0181127202e370b6af35cb4f1c89a22.js"></script>
]]></content:encoded>
										</item>
	<item>
		<title>アソシエーション分析入門 #02</title>
		<link>https://uxmeetsdata.com/association-howto-02/</link>
				<pubDate>Tue, 07 May 2019 11:00:41 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Association Analysis]]></category>
		<category><![CDATA[Cloud Datalab]]></category>
		<category><![CDATA[Data Mining]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=8876</guid>
				<description><![CDATA[Cloud Datalabを選ぶ理由。 アソシエーションルールを用いたアソシエーション分析の実践を進めて行きま...<p class="more-link"><a href="https://uxmeetsdata.com/association-howto-02/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso-e1557133653236.jpg" alt="" class="wp-image-8365" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso-e1557133653236.jpg 650w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso-e1557133653236-300x150.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<h2><strong>Cloud Datalabを選ぶ理由。</strong></h2>



<p>アソシエーションルールを用いたアソシエーション分析の実践を進めて行きますが、分析ツールは<strong>Google BigQuery</strong>と<strong>Google Cloud Datalab</strong>を用います。BigQueryついては「<a href="https://uxmeetsdata.com/bigquery-sql-01/">BigQueryではじめるSQL</a>」を参照してください。</p>



<p>Cloud Datalabは、Googleが提供するクラウドサービスで、フルマネージドなPython実行環境であり、総合的なクラウドコンピューティングサービスである<strong>GCP（Google Cloud Platform）</strong>の一部です。その特長は以下のようになります。</p>



<ul><li>ブラウザUIの対話式プログラム実行環境で非常に手軽。</li><li>クラウドの高性能なCPU・GPU・TPUを利用可能。</li><li>メジャーな機械学習系ライブラリがインストール済み。</li><li>BigQueryなどのGCPのクラウドサービスとシームレスに連携。</li></ul>



<p>なお、Cloud Datalabに近いものとして「<a href="https://uxmeetsdata.com/colab-python-01/">ColabではじめるPython</a>」でも紹介した、同じくGoogleが提供する<strong>Google Colab</strong><sup id="footnote_plugin_tooltip_1" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_1');">1)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_1"><a href="https://uxmeetsdata.com/colab-python-01/">ColabではじめるPython</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_1").tooltip({		tip: "#footnote_plugin_tooltip_text_1",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>という無料サービスがあります。どちらもブラウザUIの対話式プログラム実行環境を提供するクラウドサービスですが、Cloud DatalabはColabと違い、GCPの一部となるため利用料がかかります。ただ、Colabはあくまで教育・研究用であり、秘匿性の高いデータを扱うことができないなどの制約があるため、ビジネス利用にはCloud Datalabを推奨します。</p>



<p>また、GCPのクラウドサービスとシームレスに連携できるという特長があります。具体的には、Cloud DatalabからBigQueryに直接クエリを実行できるため、<strong>データ準備（Data Preparation）</strong>をBigQueryでSQLにより行い、<strong>データマイニング（Data Mining）</strong><sup id="footnote_plugin_tooltip_2" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_2');">2)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_2"><a href="https://uxmeetsdata.com/data-mining/">再考するデータマイニング</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_2").tooltip({		tip: "#footnote_plugin_tooltip_text_2",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>や<strong>機械学習（Machine Learning）</strong><sup id="footnote_plugin_tooltip_3" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_3');">3)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_3"><a href="https://uxmeetsdata.com/machine-learning/">いまさら聞けない機械学習</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_3").tooltip({		tip: "#footnote_plugin_tooltip_text_3",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>をCloud DatalabでPythonにより行うといった役割分担が容易になります。なお、BigQueryとのクエリ連携はColabでも可能です。</p>



<p>今回は「<a href="https://uxmeetsdata.com/data-ethnography-howto-01/">データエスノグラフィ入門</a>」と連動し、とある総合ECサイトの商品の併売傾向を深堀分析するという設定でアソシエーション分析の実践を行うため、ビジネス利用を想定し、かつBigQueryとのシームレスな連携に優れるCloud Datalabを用いることにします。</p>



<h2><strong>Cloud Datalab環境を準備。</strong></h2>



<p>ColabはGoogleアカウントがあればすぐに始められますが、Cloud Datalabは環境の準備が必要です。まずは<a href="https://console.cloud.google.com/">GCPコンソール</a>にアクセスします。BigQueryの利用経験があれば、デフォルトプロジェクトのダッシュボードが表示されるはずです。GCPの通常のサービスは左上のハンバーガーメニューからサービスを選ぶだけで利用できますが、Cloud Datalabは現在はβ版ということもあり、そうなっていません。そこで以下の手順で環境を構築します。</p>



<ol>
<li value="1"><a rel="noreferrer noopener" aria-label=" (新しいタブで開く)" href="https://console.cloud.google.com/apis/api/sourcerepo.googleapis.com/" target="_blank">Cloud Source Repositories API</a>設定ページにアクセスし［有効にする］ボタンをクリック</li>
</ol>



<ol>
<li value="2">画面右上の［Cloud Shellをアクティブにする］ボタンをクリック</li>
</ol>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2a.jpg" alt="" class="wp-image-8999" width="240" height="89"/></figure></div>



<ol>
<li value="3">画面下部の［Cloud Shell］ペインに以下のコマンドを入力し［Enterキー］で実行（※インスタンス名は任意、ここでは「xmdcom-lab」と命名）</li>
</ol>



<pre class="wp-block-preformatted">$ datalab create xmdcom-lab<br></pre>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2b-e1557240520100-1024x223.jpg" alt="" class="wp-image-9007" width="480" height="106" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2b-e1557240520100-1024x223.jpg 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2b-e1557240520100-300x65.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<ol>
<li value="4">画面下部の［Cloud Shell］ペインに表示される「Your selected zone:」のメッセージのあとに、ゾーン（zone）の選択肢に記載された番号を入力し［Enterキー］で実行（※ゾーンは任意、ここでは「34」を指定）</li>
</ol>



<pre class="wp-block-preformatted">$ Your selected zone:34</pre>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2c-e1557240553892-1024x223.jpg" alt="" class="wp-image-9009" width="480" height="103" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2c-e1557240553892-300x65.jpg 300w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2c-e1557240553892-768x167.jpg 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<ol>
<li value="5">Datalabインスタンス「xmdcom-lab」の作成が完了したら［Cloud Shell］の右上の［ウェブでプレビュー］ボタンをクリックし［ポートの変更］を選択</li>
</ol>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2d.jpg" alt="" class="wp-image-9010" width="240" height="39"/></figure></div>



<ol>
<li value="6">［プレビュー ポートの変更］モーダルでポート番号を「8081」と入力し［変更してプレビュー］ボタンをクリック</li>
</ol>



<ol>
<li value="7">別ウィンドウで［Google Cloud Datalab］の画面が表示</li>
</ol>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2e-e1557242405416-1024x261.jpg" alt="" class="wp-image-9011" width="480" height="100"/></figure></div>



<p>これでCloud Datalabの利用が可能となります。</p>



<h2><strong>まずはお約束の「Hello, World!」</strong></h2>



<p>では、Cloud Datalabの操作方法を解説しながら、簡単なPythonプログラムを動かしてみます。まずは起動された［Google Cloud Datalab］画面の左上の［Notebook］ボタンをクリックして、ノートブック編集画面を立ち上げます。ここでいう<strong>ノートブック（Notebook）</strong>は、対話式でプログラムを実行するUIの ことです。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2f-e1557242419322-1024x179.jpg" alt="" class="wp-image-9012" width="480" height="83" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2f-e1557242419322-1024x179.jpg 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2f-e1557242419322-300x53.jpg 300w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2f-e1557242419322-768x134.jpg 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>ところでCloud Datalabは、Jupyter NotebookというブラウザUIの対話式プログラム実行環境をベースにしていますが、「<a href="https://uxmeetsdata.com/python-vs-r/">Python vs. R どっち？</a>」でも触れたとおり、Jupyter NotebookはPythonだけでなくRやJuliaなどのプログラム言語にも対応しています。それぞれのプログラム言語を動作させるためのコアエンジンを<strong>カーネル（Kernel）</strong>といい、どのカーネルを利用するかをUI上で選択した上でプログラムを実行します。</p>



<p>Cloud DatalabはいまのところRやJuliaには対応しておらずPythonのみですが、Python2とPython3の選択は可能です。この二つはPythonのバージョン違いですが、文法・関数・拡張モジュールなどが大きく異なり、互換性が高くありません。したがってプログラムを作成する前に、どちらを選択するかを明確にしておく必要があります。ここではPython3を選択します。</p>



<p>ノートブックの右上の［Kernel: python2］となっているエリアをクリックして［Kernel: python3］を選択します。これでプログラムをPython3で実行することが可能となります。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2g-1-e1557263404887.jpg" alt="" class="wp-image-9018" width="240" height="44" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2g-1-e1557263404887.jpg 305w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2g-1-e1557263404887-300x54.jpg 300w" sizes="(max-width: 240px) 100vw, 240px" /></figure></div>



<p>ノートブックには以下のような入力エリアがあり、ここにソースコードを記述して左端の「▶︎」ボタンをクリックするか、［Ctrl+Enter］もしくは［Shift+Enter］キーによりプログラムを実行できます。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2g-1024x72.jpg" alt="" class="wp-image-9013" width="480" height="33" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2g-1024x72.jpg 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2g-300x21.jpg 300w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2g-768x54.jpg 768w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2g.jpg 1484w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>ひとまず、お約束の「Hello, World!」を表示するプログラムを書いてみましょう。入力エリアに「print (&#8216;Hello, World!&#8217;)」と記述し、実行してみてください。以下のように「Hello, World!」が出力エリアに表示されるかと思います。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso_2h-1024x130.jpg" alt="" class="wp-image-9014" width="480" height="57"/></figure></div>



<p>なおCloud Datalabは、<strong>Google Compute Engine（GCE）</strong>という仮想マシン（Virtual Machine：VM）上でコンテナとしてパッケージ化されているものです。すなわちCloud Datalab起動中はGCEも起動されており、さらに課金体系はGCEに従うため、起動時間による従量課金となります。ということで、使わないときはCloud Datalabを終了しておいたほうがよいでしょう。</p>



<p>Cloud Datalabを終了するには、画面右上の［Account］ボタンをクリックして［Stop VM］ボタンをクリックします。終了すると［Cloud Shell］ペインに以下のようなメッセージが表示され、GCEのVMインスタンスも終了します。</p>



<pre class="wp-block-preformatted">$ Instance xmdcom-lab is no longer running (STOPPING)</pre>



<p>Cloud Datalabを再び使う場合は、［Cloud Shell］ペインに以下のコマンドを入力し［Enterキー］で実行します。</p>



<pre class="wp-block-preformatted">$ datalab connect xmdcom-lab</pre>



<p>次回はCloud Datalabを利用した、Pythonによるアソシエーション分析のプログラミングを実践していきます。</p>
]]></content:encoded>
										</item>
	<item>
		<title>アソシエーション分析入門 #01</title>
		<link>https://uxmeetsdata.com/association-howto-01/</link>
				<pubDate>Mon, 06 May 2019 12:33:54 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Association Analysis]]></category>
		<category><![CDATA[Cloud Datalab]]></category>
		<category><![CDATA[Data Mining]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=8367</guid>
				<description><![CDATA[向きのある相関関係。 アソシエーション分析（Association Analysis）は、事象Xと事象Yの事象...<p class="more-link"><a href="https://uxmeetsdata.com/association-howto-01/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso-e1557133653236.jpg" alt="" class="wp-image-8365" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso-e1557133653236.jpg 650w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_aso-e1557133653236-300x150.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<h2><strong>向きのある相関関係。</strong></h2>



<p><strong>アソシエーション分析（Association Analysis）</strong>は、事象Xと事象Yの事象間の相関性を分析する手法で、<strong>データマイニング（Data Mining）</strong><sup id="footnote_plugin_tooltip_1" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_1');">1)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_1"><a href="https://uxmeetsdata.com/data-mining/">再考するデータマイニング</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_1").tooltip({		tip: "#footnote_plugin_tooltip_text_1",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>の中核をなす分析手法のひとつですが、もともとは<strong>バスケット分析</strong>のために考案されたものです。</p>



<p><strong>バスケット分析（Basket Analysis）</strong>は「商品Xを購買した顧客は商品Yも購買している」といった<strong>向きのある相関関係</strong>を抽出するもので、併売やマーチャンダイジングの戦略設計を目的に行われます。ちなみに、買い物かご（バスケット）に同時に入っている商品を分析するところから命名されました。その始まりは有名な「<strong>おむつとビール</strong>」の話で、1992年に大手スーパーマーケットチェーンのOsco DrugsがPOSデータを分析したところ、<strong>おむつとビールが併買されることが多い</strong>ことがわかったというものです。現在ではAmazon.comのようなECサイトのレコメンデーションにも応用されています。</p>



<p>アソシエーション分析は、事象間の相関性を<strong>発見的アプローチ（Discovering Approach）</strong>で分析する手法ですが、この<strong>発見的</strong>であるという点がとても重要です。「<a href="https://uxmeetsdata.com/data-ethnography-howto-03/">データエスノグラフィ入門 #03</a>」でも触れたとおり、事象間の相関性の分析には、検証的アプローチと発見的アプローチの二つがありますが、<strong>検証的アプローチ（Verifying Approach）</strong>は、相関の存在が仮説として想定されるものについて事実を検証していくアプローチであり、想定していない相関を見つけることはできません。分析対象データの変数が少ない場合は検証的アプローチで十分ですが、変数が多い場合は<strong>経験からは想定できない相関が潜在している可能性</strong>を否定できません。現に、おむつとビールの購買に相関があることを、熟練のマーケターたちは見抜けていなかったわけです。</p>



<p>アソシエーション分析によって得られる発見は、あくまで<strong>向きのある相関関係</strong>であり、因果関係を証明するものではありません。しかしながら、これをきっかけに<strong>因果推論（Causal Inference）</strong><sup id="footnote_plugin_tooltip_2" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_2');">2)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_2"><a href="https://uxmeetsdata.com/causal-inference/">いまさら聞けない因果推論</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_2").tooltip({		tip: "#footnote_plugin_tooltip_text_2",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>や<strong>ベイズ推定（Bayesian Inference）</strong><sup id="footnote_plugin_tooltip_3" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_3');">3)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_3"><a href="https://uxmeetsdata.com/bayesian-inference/">いまさら聞けないベイズ推定</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_3").tooltip({		tip: "#footnote_plugin_tooltip_text_3",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>などを行うことで因果関係を明らかにする可能性が高まります。</p>



<p>そこで今回は、このアソシエーション分析の実践にむけた入門編をご紹介します。なお、分析ツールはGoogle BigQueryとGoogle Cloud Datalabを用いて進めます。BigQueryついては「<a href="https://uxmeetsdata.com/bigquery-sql-01/">BigQueryではじめるSQL</a>」を参照してください。Cloud Datalabについては選択する理由と合わせて次回に解説します。</p>



<h2><strong>共起性に基づく分析手法。</strong></h2>



<p>実践に入る前に、分析の基本的な考え方についてまとめておきます。まずアソシエーション分析は事象間の相関性を分析する手法の総称であり、特定の分析手法をさすものではありません。共起性に基づく分析手法が一般的ですが、他にも<strong>ニューラルネットワーク（Neural Network）</strong><sup id="footnote_plugin_tooltip_4" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_4');">4)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_4"><a href="https://uxmeetsdata.com/machine-learning/">いまさら聞けない機械学習</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_4").tooltip({		tip: "#footnote_plugin_tooltip_text_4",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>などを用いたアプローチもあります。ここでは共起性に基づく分析手法を用います。</p>



<p><strong>共起（Co-occurrence）</strong>は、自然言語処理分野で使われる概念で、複数の<strong>単語</strong>や<strong>熟語</strong>が同一の<strong>文</strong>において生起することをいいます。たとえば「しとしと」は「雨」とは共起しますが「雪」とは共起しません。そして共起性の強い単語や熟語は相関性が強いと言えます。この考え方を応用し、買い物かごを文に、商品を単語にそれぞれ見立てて、その共起性により相関性を分析する手法がバスケット分析です。</p>



<p>共起性の基本指標となるのが共起頻度です。<strong>共起頻度（Co-occurrence Frequency）</strong>は、<strong>事象Xと事象Yのどちらも発生した頻度</strong>のことで、バスケット分析では商品Xと商品Yを同時購買した履歴の頻度、もしくは両方の購買経験をもつ顧客の数をさします。数式で表すとこのようになります。</p>







<p style="text-align:left">$$共起頻度：\mid X\cap Y \mid\\$$</p>



<p>参考までに、集合Xと集合Yの集合間の類似性の指標としてよく用いられるものに、Jaccaard係数・Dice係数・Simpson係数があります。いずれも0以上1以下の値で、<strong>1に近いほど類似性が高い</strong>ということになります。これらを事象間の相関性に置き換えて説明すると以下のようになります。</p>



<p><strong>Jaccard係数</strong>は、<strong>事象Xと事象Yのいずれかが発生した頻度</strong>に対する<strong>共起頻度</strong>の割合です。ただしこの係数には、共起頻度が高くても、事象Xと事象Yのいずれかの発生頻度が高い場合に相関性が下がるという問題があります。</p>



<p>$$Jaccard係数：\frac{\mid X\cap Y \mid}{\mid X\cup Y \mid} \\$$</p>



<p><strong>Dice係数</strong>は、<strong>事象Xと事象Yのそれぞれの発生頻度の平均</strong>に対する<strong>共起頻度</strong>の割合です。分母を和集合から<strong>平均</strong>に置き換えることで、Jaccard係数の問題を緩和しています。とはいえ事象Xと事象Yのいずれかの発生頻度が極端に高い場合は、相関性が下がる問題を解消できません。</p>



<p>$$Dice係数：\frac{\mid X\cap Y \mid}{\frac{\mid X\mid+\mid Y\mid}{2}} \\$$</p>



<p><strong>Simpson係数</strong>は、<strong>事象Xと事象Yのそれぞれの発生頻度の最小値</strong>に対する<strong>共起頻度</strong>の割合です。分母を平均から<strong>最小値</strong>に置き換えることで、Dice係数でも解消できない頻度差の問題を解消します。ただ逆に、事象Xと事象Yのいずれかの発生頻度が極端に低い場合は、全体の頻度によらず相関性がほぼ1になってしまうという問題があります。</p>



<p>$$Simpson係数：\frac{\mid X\cap Y \mid}{min\{\mid X \mid,\mid Y \mid\}} \\$$</p>



<p>また、これらの指標はいずれも、事象Xと事象Yは<strong>対称で向きを持たない</strong>ため、逆にしても意味は変わりません。</p>



<h2 id="mce_20"><strong>アソシエーションルールと指標。</strong></h2>



<p>続いて、アソシエーション分析における事象間の相関性の指標としてよく用いられるアソシエーションルールについて説明します。<strong>アソシエーションルール（Association Rule）</strong>とは「商品Xを購入した顧客は商品Yも購入している」といった規則性のことで、信頼度・支持度・リフトの三つの指標を使うのが一般的です。わかりやすくするために、バスケット分析で説明します。</p>



<p><strong>信頼度（Confidence）</strong>は、<strong>商品Xを購買した顧客が商品Yも購買する確率</strong>のことで、併売戦略やレコメンデーションにむけた分析の基本指標であり、以下の数式で表現されます。</p>



<p>$$信頼度：\frac{\mid X\cap Y\mid}{\mid X\mid} =P(Y\mid X)\\$$</p>



<p>これは「<a href="https://uxmeetsdata.com/bayesian-inference/">いまさら聞けないベイズ推定</a>」でも触れた、ある事象Xが起こるという条件のもとでの事象Yの確率である<strong>条件付き確率（Conditional Probability）</strong>と同じものです。それゆえ、事象Xと事象Yは<strong>非対称で向きを持つ</strong>ため、逆にすると意味が変わります。「おむつとビール」の話は、おむつとビールの向きには言及していませんが、おむつを買った（買おうとしている）顧客にビールをお薦めするのか、ビールを買った（買おうとしている）顧客におむつをお薦めするのかという向きには重要な意味があります。</p>



<p><strong>支持度（Support）</strong>は、<strong>全体の購買の中で商品Xと商品Yのどちらも購買される確率</strong>のことで、全体の購買の集合を｜A｜として以下の数式で表現されます。</p>



<p>$$支持度：\frac{\mid X\cap Y \mid}{\mid A\mid} =P(X\cap Y)\\$$</p>



<p>仮に、商品Xを購買した顧客が商品Yも購買する確率（信頼度）が80%だったとしても、商品Xと商品Yのいずれも購買した顧客が全体の1%にも満たない場合、統計的な信頼性が低いだけでなく、それをもとに併売戦略を立てたところでビジネス的に意味はありません。そこで補足指標として支持度を用います。また分析の効率化のため、支持度が閾値（0.1〜0.5が一般的）を下回る組み合わせは、事前に分析対象から除外します。</p>



<p><strong>リフト（Lift）</strong>は、<strong>全体の購買の中で商品Yが購買される確率</strong>に対する商品Xを購買した顧客が商品Yも購買する確率（<strong>信頼度</strong>）の割合のことで、以下の数式で表現されます。</p>



<p>$$リフト：\frac{\frac{\mid X\cap Y \mid}{\mid X \mid}}{\frac{\mid Y \mid}{\mid A \mid}} =\frac{P(Y\mid X)}{P(Y)}\\$$</p>



<p>仮に、商品Xを購買した顧客が商品Yも購買する確率（信頼度）が80%だったとしても、そもそも商品Yが購買される確率が80%であれば、商品Xの購買が商品Yの購買に与える影響力を説明することはできません。そこで補足指標としてリフトを用います。また分析の効率化のため、リフトが閾値（1が一般的）を下回る組み合わせは、事前に分析対象から除外します。</p>



<p>次回以降で、これらのアソシエーションルールを用いたアソシエーション分析の実践を進めて行きます。</p>
]]></content:encoded>
										</item>
	</channel>
</rss>
