<?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>Cloud Datalab &#8211; uxmeetsdata.com</title>
	<atom:link href="https://uxmeetsdata.com/tag/cloud-datalab/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>クラスター分析入門 #04</title>
		<link>https://uxmeetsdata.com/clustering-howto-04/</link>
				<pubDate>Tue, 23 Jul 2019 12:00:57 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Cloud Datalab]]></category>
		<category><![CDATA[Clustering]]></category>
		<category><![CDATA[Data Mining]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=11327</guid>
				<description><![CDATA[非階層型クラスタリングを実践。 前回は階層型クラスタリングでクラスター数のあたりをつけ、各クラスターの特徴を捉...<p class="more-link"><a href="https://uxmeetsdata.com/clustering-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_cls-e1556962655252.jpg" alt="" class="wp-image-8366" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_cls-e1556962655252.jpg 640w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_cls-e1556962655252-300x150.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<h2><strong>非階層型クラスタリングを実践。</strong></h2>



<p>前回は階層型クラスタリングでクラスター数のあたりをつけ、各クラスターの特徴を捉えました。今回は非階層型クラスタリングを実践します。</p>



<p><strong>非階層型クラスタリング（Non-hierarchical Clustering）</strong>は階層的な構造を持たず、最初に決めたクラスター数にサンプルを分けていく手法です。ただし、いくつのクラスターに分けるかは分析者が決める必要があり、最適クラスター数を自動的には計算する方法は確立されていません。階層型と比較して計算量が少なく、サンプル数が多いデータの分析に適しています。</p>



<p>まずは階層型クラスタリングの結果との比較を行うため、前回と同様にサンプリングデータである「sum_members_cls_smp」を使用します。</p>



<p>まずはCloud Datalabで非階層型クラスタリングのための実行環境を準備します。とはいえCloud Datalabには、GCP（Google Cloud Platform）との連携や、メジャーなデータ分析・機械学習系の拡張モジュールがあらかじめインストールされているため、インポートするだけです。データ操作やBigQueryとの連携用に「pandas」、作成したクラスターの主成分分析の結果の可視化用に「matplotlib」、各種計算処理用に「numpy」「scikit-learn」 をそれぞれインポートします。</p>



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



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



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



<h2><strong>K平均法による併合。</strong></h2>



<p>では、機械学習用の拡張モジュールであるscikit-learnを用いて、非階層型クラスタリングを行います。以下のようなコードで実現できるので、入力エリアに記述し、実行してみてください。</p>



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



<p>なお、分類方法には<strong>k平均法</strong>を用いています。<strong>k平均法（k-Means Method）</strong>は非階層型クラスタリングの代表的な分類手法で、クラスターの平均を用い、与えられたクラスター数k個に分類することからこのように命名されたものです。この計算処理にはscikit-learnのKMeansメソッドを用います。</p>



<p>また、k平均法の結果は多次元の距離で表現されるため、可視化するには次元圧縮を行う必要があります。次元圧縮のアルゴリズムとして最も一般的なのは<strong>主成分分析（Principal Component Analysis：PCA）</strong>ですが、ここでは非線形データを扱える<strong>カーネル主成分分析（Kernel PCA）</strong>を選択します。この計算処理には同じくscikit-learnのKernel PCAメソッドを用います。結果をクラスターごとに色分けして散布図で描画すると以下のようになります。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_4a-1024x565.png" alt="" class="wp-image-11782" width="480" height="265" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_4a-1024x565.png 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_4a-300x165.png 300w, https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_4a-768x423.png 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>この散布図から、大きく上下に塊が分離していることがわかります。これは縦軸に性別が選択された結果です。年齢はクラスタリングに影響を与えておらず、無視されています。横軸には商品カテゴリの購買傾向が表現されており、右側のオレンジとブルーの塊は、全商品カテゴリを購入している層となります。このうように散布図を見ることで、ある程度は視覚的に捉えることができます。とはいえ詳しく把握するには、クラスターごとに特徴を見る必要があります。</p>



<p>Tableauで可視化するとわかりやすいので、クラスタリング結果をいったんBigQueryに戻します。以下のコードを入力エリアに記述し、実行してみましょう。なお「to_gbq」関数の引数には、元の会員マスタにクラスターIDである「cluster」列を追加したデータフレーム、書き込み先のテーブル名、GCPのプロジェクトIDを指定します。</p>



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



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



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



<h2><strong>クラスターごとの特徴を可視化。</strong></h2>



<p>「sum_clusters_non」テーブルをTableauで可視化します。クラスターIDを［行］、各説明変数の平均を［列］シェルフにそれぞれ設定すると、以下のようなビューが表示されます。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_4b-1024x514.png" alt="" class="wp-image-11786" width="480" height="241" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_4b-1024x514.png 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_4b-300x150.png 300w, https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_4b-768x385.png 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>クラスターごとの特徴を見ると、クラスターID:1は女性のみで構成され、平均年齢は30代半ば、主に「家庭・ガーデニング用品」を購入しているセグメント、クラスターID:2は男性のみで構成され、平均年齢は30代半ば、全商品カテゴリを購入しているセグメント、などがわかります。</p>



<p>階層型と比較して、<strong>性別による分類が強く働いている</strong>ことがわかります。また平均年齢については階層型と同様に分類にはほとんど影響を与えていません。購買商品カテゴリについては階層型と似たような分類結果となっています。</p>



<p>ここまでは階層型との比較のため、サンプリングデータを用いた非階層型クラスタリングを実施しましたが、同様の手順でノンサンプリングデータについても実施することが可能です。それには「sum_members_cls_non」テーブルを使用します。このデータの非階層型クラスタリングの分析結果も、上記と同様にTableauで可視化すると、以下のようなビューが表示されます。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_4c-1024x617.png" alt="" class="wp-image-11790" width="480" height="289" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_4c-1024x617.png 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_4c-300x181.png 300w, https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_4c-768x463.png 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>クラスターごとの特徴を見ると、さきほどは男女で分かれていた全商品カテゴリ購買層が統合されて一つのクラスターになっているなど、分類に対する性別の影響力が弱まっており、概ね<strong>商品カテゴリの購買傾向による分類</strong>になっていることがわかります。これはサンプル数が増えているにも関わらず、購買傾向のパターンが増えずに固定化されることで影響力が高まり、相対的に性別の影響力が低下しているものと思われます。購買商品カテゴリの変数の値を購買頻度に合わせて重み付けするなど行えば、また違った分類結果が導出される可能性があります。</p>



<p>ここまで階層型および非階層型の両方のアプローチによるクラスター分析の実践を進めてきましたが、今回のようなビッグデータでもサンプル数を減らすことで階層型クラスタリングを実行でき、分類構造を視覚的に捉えながら妥当なクラスター数にあたりをつけた上で、最終的に非階層型クラスタリングでノンサンプリングデータの分類が可能であることがわかったかと思います。</p>



<p>このプロセスにより、大量の顧客データから「<strong>似た者同士</strong>」であるセグメントを分析し、<strong>すべての顧客データに割り当てた上でパーソナライゼーションを実行する</strong>ことが可能となります。</p>
]]></content:encoded>
										</item>
	<item>
		<title>クラスター分析入門 #03</title>
		<link>https://uxmeetsdata.com/clustering-howto-03/</link>
				<pubDate>Mon, 22 Jul 2019 11:00:21 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Cloud Datalab]]></category>
		<category><![CDATA[Clustering]]></category>
		<category><![CDATA[Data Mining]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=11325</guid>
				<description><![CDATA[階層型クラスタリングを実践。 BigQueryにて分析データ環境が整ったところで、Cloud Datalabに...<p class="more-link"><a href="https://uxmeetsdata.com/clustering-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_cls-e1556962655252.jpg" alt="" class="wp-image-8366" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_cls-e1556962655252.jpg 640w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_cls-e1556962655252-300x150.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<h2><strong>階層型クラスタリングを実践。</strong></h2>



<p>BigQueryにて分析データ環境が整ったところで、Cloud Datalabによるクラスター分析を行います。クラスター分析には<strong>階層型</strong>と<strong>非階層型</strong>の二つがあり、ここでは両方のアプローチを試みますが、今回は階層型クラスタリングを実践します。</p>



<p><strong>階層型クラスタリング（Hierarchical Clustering）</strong>は、最も似ている対象の組み合わせから順にグルーピングしていく手法で、その過程で階層が構成され、最終的に<strong>デンドログラム（Dendrogram）</strong>と呼ばれる樹形図が完成します。順にグルーピングするため最初にクラスター数を決める必要はなく、後から決めることが可能であり、決めたクラスター数により最終的にどのグループをクラスターとするかが決まります。</p>



<p>まずはクラスターの分類構造を視覚的に捉えることが可能な階層型から行い、妥当なクラスター数のあたりをつけつつ、各クラスターの特徴を捉えてみることにします。</p>



<p>なお階層型クラスタリングではサンプル数が多いと<strong>極端に計算量が増え</strong>、また<strong>分類構造を捉えづらくなる</strong>ためサンプリングデータで行います。分析対象データの会員数は64万人程度ですが、わかりやすさを重視して0.1%の636人にサンプリングします。前回作成した「sum_members_cls_smp」テーブルがそれに該当します。</p>



<p>まずはCloud Datalabで階層型クラスタリングのための実行環境を準備します。とはいえCloud Datalabには、GCP（Google Cloud Platform）との連携や、メジャーなデータ分析・機械学習系の拡張モジュールがあらかじめインストールされているため、インポートするだけです。データ操作やBigQueryとの連携用に「pandas」、作成したデントログラムの可視化用に「matplotlib」、各種計算処理用に「numpy」「scipy」 をそれぞれインポートします。</p>



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



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



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



<h2><strong>ウォード法による併合。</strong></h2>



<p>では、科学計算の拡張モジュールであるscipyを用いて、階層型クラスタリングを行います。以下のようなコードで実現できるので、入力エリアに記述し、実行してみてください。</p>



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



<p>なお、併合方法に<strong>ウォード法</strong>を、測定距離に<strong>ユークリッド距離</strong>をそれぞれ指定しています。<strong>ユークリッド距離（Euclidean Distance）</strong>については「<a href="https://uxmeetsdata.com/clustering-howto-01/">クラスター分析入門 #01</a>」で説明しているのでそちらを参照してください。ここでは<strong>ウォード法（Ward Method）</strong>について簡単に補足しておきます。クラスターXの重心とクラスター内の各要素との距離の二乗和をL(X)とするとして、クラスターAとBを併合したクラスターのL(A∪B)と、併合前のそれぞれのクラスターのL(A)およびL(B)の合計との差が最小になるようなクラスター同士を併合する手法がウォード法です。式で表現すると、以下のΔが最小になるように計算します。計算量は多いものの分類精度が高く、階層型クラスタリングの併合手法としてよく用いられます。</p>







<p>$$Δ = L(A∪B) -(L(A)+L(B))\\$$</p>



<p>実行結果として、以下のような<strong>デンドログラム（Dendrogram）</strong>が描画されるかと思います。なお、上記のプログラムでthresholdという変数に8を指定していますが、これは縦軸の8の位置に水平方向の補助線を引くという意味で、その補助線とデンドログラムが交差する点がクラスターの分割ポイントとなります。すなわち指定する値によりクラスター数を変えることが可能ということです。冒頭で階層型は最初にクラスター数を決める必要はなく、後から決めることが可能だと言いましたが、これがそのことです。補助線で分割された各クラスターは色分けして描画され、左から順に正の整数でクラスターIDが付与されます。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_3a-1024x586.png" alt="" class="wp-image-11703" width="480" height="272"/></figure></div>



<p>このデンドログラムから、クラスター数は10程度が妥当ではないかというあたりがつけられます。とはいえ各クラスターの特徴や、なぜこのように分類されたのかがわかりません。それにはクラスターごとに特徴量を見る必要があります。</p>



<p>Tableauで可視化するとわかりやすいので、クラスタリング結果をいったんBigQueryに戻します。以下のコードを入力エリアに記述し、実行してみましょう。なお「to_gbq」関数の引数には、元の会員マスタにクラスターIDである「cluster」列を追加したデータフレーム、書き込み先のテーブル名、GCPのプロジェクトIDを指定します。</p>



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



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



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



<h2><strong>クラスターごとの特徴を可視化。</strong></h2>



<p>「sum_clusters_hrc」テーブルをTableauで可視化します。クラスターIDを［行］、各説明変数の平均を［列］シェルフにそれぞれ設定すると、以下のようなビューが表示されます。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_3b-1024x514.png" alt="" class="wp-image-11704" width="480" height="241" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_3b-1024x514.png 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_3b-300x150.png 300w, https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_3b-768x385.png 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>説明変数はすべて0から1の値であるため、平均値の範囲も同様になります。また、平均値が0から1のどこにあるかで変数の特徴がわかります。たとえばクラスターID:1は性別が0.4程度と男性の比率が高く、クラスターID:4は性別が0.6程度と女性の比率が高いことがわかります。</p>



<p>このようにクラスターごとの各変数の値を見ることで、各クラスターの特徴や、なぜそのように分類されたのかが見えてきます。具体的には、クラスターID:2は男女比率が同程度で、平均年齢は30代後半、全商品カテゴリを購入しているセグメント、クラスターID:4は女性の比率が高く、平均年齢は30代半ば、主に「エレクトロニクス・コンピューター」「家庭・ガーデニング用品」を購入しているセグメント、などがわかります。</p>



<p>また全体感として<strong>平均年齢にあまり差異はなく</strong>、分類にはほぼ影響していないことがわかります。<strong>性別については、男女比40%から60%の範囲でばらついており</strong>、やや影響していることがわかります。購買商品カテゴリについては、<strong>全商品カテゴリを購入している層と特定の商品カテゴリのみを購入している層に分かれている</strong>ことがわかります。これは購入頻度との相関がありそうです。</p>



<p>ここでの階層型クラスタリングは、わかりやすさを重視してサンプル数をかなり減らしており、統計的な信頼度は低いといえます。しかしながら、仮説として妥当なクラスター数のあたりをつけたり、どのように分類されるかの傾向を見るには十分な材料と言えるでしょう。</p>



<p>次回は非階層型クラスタリングを実践します。</p>
]]></content:encoded>
										</item>
	<item>
		<title>クラスター分析入門 #02</title>
		<link>https://uxmeetsdata.com/clustering-howto-02/</link>
				<pubDate>Sun, 21 Jul 2019 12:00:56 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Cloud Datalab]]></category>
		<category><![CDATA[Clustering]]></category>
		<category><![CDATA[Data Mining]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=11323</guid>
				<description><![CDATA[Cloud Datalabでクラスター分析。 ここからクラスター分析の実践を進めて行きますが、分析ツールはGo...<p class="more-link"><a href="https://uxmeetsdata.com/clustering-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_cls-e1556962655252.jpg" alt="" class="wp-image-8366" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_cls-e1556962655252.jpg 640w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_cls-e1556962655252-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>」、Cloud Datalabについては選択する理由と合わせて「<a href="https://uxmeetsdata.com/association-howto-02/">アソシエーション分析入門 #02</a>」に詳しいのでそちらを参照してください。</p>



<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>という無料サービスがあります。ただ、Colabはあくまで教育・研究用であり、秘匿性の高いデータを扱うことができないなどの制約があるため、ビジネス利用にはCloud Datalabを推奨します。</p>



<p>今回は「<a href="https://uxmeetsdata.com/data-ethnography-howto-01/">データエスノグラフィ入門</a>」と連動し、とある総合ECサイトの会員のセグメンテーションを行うという設定でクラスター分析の実践を行うため、ビジネス利用を想定し、Cloud Datalabを用いることにします。</p>



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



<p>それでは、Cloud Datalabを利用したPythonによるクラスター分析のプログラミングを実践していきます。まず分析の背景と目的を整理します。</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%;">
<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-04/">データエスノグラフィ入門 #04</a>」を参照）これは、<strong>新たな商品カテゴリを提案することが優良化につながる</strong>可能性を示唆しています。ただし、闇雲に提案するよりも、<strong>類似する会員セグメントの併売傾向</strong>と照らし合わせ、未購買商品カテゴリを提案するほうが効果が高いと考えられます。そこでクラスター分析によりそれを明らかにします。</p>



<h2><strong>変数選択とダミー変数。</strong></h2>



<p>まずはクラスタリングに用いる説明変数を定義します。説明変数を定義することを<strong>変数選択</strong>や<strong>特徴選択</strong>といいますが、非常に難しい問題なので、ここでは深く触れず、ひとまず「性別・年齢・購買商品カテゴリ」とします。</p>



<p>次に、定義した説明変数の中で相関する変数がないかを確認します。「<a href="https://uxmeetsdata.com/clustering-howto-01/">クラスター分析入門 #01</a>」でも触れたとおり、クラスター分析において<strong>強い相関をもつ変数の存在は冗長で無意味であり、予めどちらかを除外する</strong>必要があります。</p>



<p>変数間の相関性は、質的変数であれば<strong>クロス集計（Cross Tabulation）</strong>、量的変数であれば<strong>散布図（Scatter Plot）</strong>などの手法を用いて分析します。ここでは詳しいプロセスは省略しますが、各変数間に相関性が見られないことが下図にて確認できます。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_2a-1024x728.png" alt="" class="wp-image-11621" width="480" height="342" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_2a-1024x728.png 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_2a-300x213.png 300w, https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_2a-768x546.png 768w" sizes="(max-width: 480px) 100vw, 480px" /><figcaption>年代別性別比率</figcaption></figure></div>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_2b-1024x728.png" alt="" class="wp-image-11622" width="480" height="342" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_2b-1024x728.png 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_2b-300x213.png 300w, https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_2b-768x546.png 768w" sizes="(max-width: 480px) 100vw, 480px" /><figcaption>商品カテゴリ別性別比率</figcaption></figure></div>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_2c-1024x728.png" alt="" class="wp-image-11623" width="480" height="342" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_2c-1024x728.png 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_2c-300x213.png 300w, https://uxmeetsdata.com/wp-content/uploads/2019/07/xmd_cls_2c-768x546.png 768w" sizes="(max-width: 480px) 100vw, 480px" /><figcaption>商品カテゴリ別年代比率</figcaption></figure></div>



<p>次にクラスタリング用のデータを用意するわけですが、ここでひとつ前処理が必要になります。「<a href="https://uxmeetsdata.com/clustering-howto-01/">クラスター分析入門 #01</a>」で説明したとおり<strong>要素間の距離を類似度とみなす</strong>ことで類似性を分析するのですが、距離を測定するためには変数が数値化されている必要があります。年齢のような量的変数は問題ありませんが、性別や購買商品カテゴリは質的変数であるため、そのままでは数値として扱うことができません。そこで<strong>ダミー変数</strong>という概念を用います。</p>



<p><strong>ダミー変数（Dummy Variable）</strong>とは、質的変数を量的変数として扱うための変数のことで、0と1の二項値を持ちます。例えば、性別であれば&#8221;男性&#8221;と&#8221;女性&#8221;の二項値の場合はそのまま男性を0、女性を1のように設定します。</p>



<table style="table-layout: fixed; width: 100%;">
<tbody>
<tr style="color: #fff; background-color: #000;">
<td>変数</td>
<td>値</td>
</tr>
<tr>
<td style="background-color: #eee;">性別（gender）</td>
<td>男性：0、女性：1</td>
</tr>
<tr>
</tbody>
</table>



<p>ただし、最近では性別の選択肢に&#8221;その他&#8221;を設定しているケースも多く、その場合は二項値になりません。このような多項値の場合には、変数の値を別々の真偽値をもつ変数に分解し、偽を0、真を1のように設定します。</p>



<table style="table-layout: fixed; width: 100%;">
<tbody>
<tr style="color: #fff; background-color: #000;">
<td>変数</td>
<td>値</td>
</tr>
<tr>
<td style="background-color: #eee;">性別が男性である（is_gender_male）</td>
<td>偽：0、真：1</td>
</tr>
<tr>
<td style="background-color: #eee;">性別が女性である（is_gender_female）</td>
<td>偽：0、真：1</td>
</tr>
<tr>
<td style="background-color: #eee;">性別がその他である（is_gender_other）</td>
<td>偽：0、真：1</td>
</tr>
<tr>
</tbody>
</table>



<p>今回の対象データでいうと、性別は男性と女性の二項値になっているため、そのままダミー変数にすることができます。なお、購買商品カテゴリについては、それぞれについて購買経験の有無により真偽値を設定することとします。</p>



<p>ところで、年齢については量的変数であるため説明変数として扱うことが可能ですが、クラスタリングに使うには他の説明変数と値の範囲を揃える必要があります。すなわちダミー変数と同じ0から1の値になるように調整することになります。年齢はおよそ0歳から100歳なので、100で割った値を説明変数とします。なお、このように説明変数の値の範囲を変えることを<strong>特徴のスケール（Feature Scaling）</strong>、値の範囲を揃えることを<strong>正規化（Normalization）</strong>といいます。</p>



<p>以上を踏まえ、クラスタリング用のデータを以下のスキーマ定義で作成します。</p>



<table style="table-layout: fixed; width: 100%;">
<tbody>
<tr style="color: #fff; background-color: #000;">
<td>変数</td>
<td>値</td>
</tr>
<tr>
<td style="background-color: #eee;">性別（gender）</td>
<td>男性：0、女性：1</td>
</tr>
<tr>
<td style="background-color: #eee;">年齢（age）</td>
<td>年齢の1/100</td>
</tr>
<tr>
<td style="background-color: #eee;">洋服の購買経験あり（is_buy_clothing）</td>
<td>偽：0、真：1</td>
</tr>
<tr>
<td style="background-color: #eee;">玩具の購買経験あり（is_buy_toy）</td>
<td>偽：0、真：1</td>
</tr>
<tr>
<td style="background-color: #eee;">スポーツ用品の購買経験あり（is_buy_sports）</td>
<td>偽：0、真：1</td>
</tr>
<tr>
<td style="background-color: #eee;">家庭用品の購買経験あり（is_buy_home）</td>
<td>偽：0、真：1</td>
</tr>
<tr>
<td style="background-color: #eee;">美容用品の購買経験あり（is_buy_beauty）</td>
<td>偽：0、真：1</td>
</tr>

<tr>
<td style="background-color: #eee;">本の購買経験あり（is_buy_books）</td>
<td>偽：0、真：1</td>
</tr>
<tr>
<td style="background-color: #eee;">自動車用品の購買経験あり（is_buy_automotive）</td>
<td>偽：0、真：1</td>
</tr>
<tr>
<td style="background-color: #eee;">映画の購買経験あり（is_buy_movie）</td>
<td>偽：0、真：1</td>
</tr>
<tr>
<td style="background-color: #eee;">電化製品の購買経験あり（is_buy_electronics）</td>
<td>偽：0、真：1</td>
</tr>
</tbody>
</table>



<p>この定義に従ってBigQueryで分析用のテーブルを作成します。BigQueryのクエリエディタに以下のSQL文を入力し、青い［実行］ボタンをクリックしてみましょう。このクエリ結果をデータセット「DE」に「sum_members_cls_ non」という名前で保存します。なお、こちらは<strong>ノンサンプリングデータ</strong>になります。</p>



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



<p>また、計算量を減らし、かつ分類構造を視覚的に捉えやすくするため、ここでは主に<strong>サンプリングデータ</strong>を用いることにします。クエリエディタに以下のSQL文を入力し、青い［実行］ボタンをクリックしてみましょう。このクエリ結果をデータセット「DE」に「sum_members_cls_smp」という名前で保存します。さきほどとの違いは、WHERE文に会員IDを1,000で割った剰余が0の場合に限定するという条件文を追加している点で［※1］、<strong>0.1%のサンプリング</strong>を意味します。</p>



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



<p>これで分析用のデータと環境は整いました。次回以降で、階層型・非階層型のそれぞれのアプローチでクラスター分析を進めて行きます。</p>
]]></content:encoded>
										</item>
	<item>
		<title>クラスター分析入門 #01</title>
		<link>https://uxmeetsdata.com/clustering-howto-01/</link>
				<pubDate>Sat, 20 Jul 2019 09:00:50 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Cloud Datalab]]></category>
		<category><![CDATA[Clustering]]></category>
		<category><![CDATA[Data Mining]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=11298</guid>
				<description><![CDATA[似た者同士を集める。 クラスター分析（Cluster Analysis）は、異なる性質を持つ要素が混ざり合った...<p class="more-link"><a href="https://uxmeetsdata.com/clustering-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_cls-e1556962655252.jpg" alt="" class="wp-image-8366" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_cls-e1556962655252.jpg 640w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_cls-e1556962655252-300x150.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<h2><strong>似た者同士を集める。</strong></h2>



<p><strong>クラスター分析（Cluster Analysis）</strong>は、異なる性質を持つ要素が混ざり合った集合から、互いに似た性質を持つ要素を集めた部分集合を作る手法で、<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/">再考するデータマイニング</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>の中核をなす分析手法のひとつです。なお、<strong>クラスター（Cluster）</strong>とは房・群れ・集団を意味します。</p>



<p>ところで「<a href="https://uxmeetsdata.com/machine-learning/">いまさら聞けない機械学習</a>」で<strong>教師なし学習（Unsupervised Learning）</strong>の手法として<strong>クラスタリング（Clustering）</strong>を紹介しましたが、手法としては全く同じものです。データマイニングでは気づいていない似た性質を持つ集合を<strong>発見する</strong>ことを主な目的とし、機械学習では今後発生する事象がどの集合に分類されるかを<strong>予測する</strong>ことを主な目的とします。</p>



<p>なお、教師なし学習であるため、クラスターの分類基準はあらかじめ決まっていません。与えられた変数や特徴量をもとに、性質の近い要素を半自動的に抽出して分類することになります。</p>



<p>クラスター分析はマーケティング領域でよく用いられます。「<a href="https://uxmeetsdata.com/personalization/">再考するパーソナライゼーション</a>」でも触れたとおり、多様化する生活者の価値観に個別に最適化することを<strong>パーソナライゼーション（Peasonalization）</strong>といい、そのアプローチにより売上を最大化するマーケティング戦略を<strong>1to1マーケティング</strong>といいますが、実際にはすべての個人に対して個別に最適化することは難しく、似た者同士での分類、すなわち<strong>セグメンテーション（Segmentation）</strong>を行う必要があります。一方で、分類基準が自明である場合はよいものの、顧客の価値観や意思決定に関わる因子は極めて複雑であり、多くの場合は自明ではありません。</p>



<p>そのような場合においてクラスター分析は有効な手段であり、顧客データが持つ性別・年齢・購買傾向などのさまざまな変数から似た者同士をクラスターとして抽出することで、セグメンテーションのヒントを得ることが可能となります。</p>



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



<h2><strong>階層型と非階層型。</strong></h2>



<p>実践に入る前に、分析の基本的な考え方についてまとめておきます。まずクラスター分析は要素間の類似性を分析する手法の総称であり、特定の分析手法をさすものではありません。分類の形式や要素間の類似度の計算ロジックにより、いくつかの手法に分かれます。</p>



<ul><li><strong>分類の形式</strong>：階層型、非階層型</li><li><strong>分類に用いる距離</strong>：ユークリッド距離、マハラノビス距離など</li><li><strong>分類における併合方法</strong>：ウォード法、k平均法など</li></ul>



<p>まず大きく階層型と非階層型に分かれます。それぞれの詳細は次回以降に後述するとして、ここでは概要を説明しておきます。</p>



<p><strong>階層型クラスタリング（Hierarchical Clustering）</strong>は、最も似ている対象の組み合わせから順にグルーピングしていく手法で、その過程で階層が構成され、最終的に<strong>デンドログラム（Dendrogram）</strong>と呼ばれる樹形図が完成します。順にグルーピングするため最初にクラスター数を決める必要はなく、後から決めることが可能であり、決めたクラスター数により最終的にどのグループをクラスターとするかが決まります。</p>



<p><strong>非階層型クラスタリング（Non-hierarchical Clustering）</strong>は階層的な構造を持たず、最初に決めたクラスター数にサンプルを分けていく手法です。ただし、いくつのクラスターに分けるかは分析者が決める必要があり、最適クラスター数を自動的には計算する方法は確立されていません。階層型と比較して計算量が少なく、サンプル数が多いデータの分析に適しています。</p>



<p>階層型と非階層型の使い分けについて、データのサンプル数が多い場合には非階層型が有利であることから、ビッグデータ分析では非階層型を使うと説明される場合もありますが、それには異論があります。</p>



<p>ビッグデータであっても、分類の軸となる変数や特徴量をつかむことが目的であれば、サンプリングによりサンプル数を減らしての分析も可能です。むしろ、どのように分類されるかの傾向や、あるいは分類の構造をつかみたい場合は、最初にクラスター数を決める必要がなく、さらに分類結果が構造化される階層型のほうが有利な場合も少なくありません。非階層型は、とにかく分類はされるものの、指定したクラスター数の妥当性や、なぜそのように分類されたかの構造を視覚的につかむことができないからです。</p>



<p>このように、階層型と非階層型のどちらが適しているかは、データ量だけでなく分析の目的やデータの理解度などによっても異なりますし、どちらが適しているかがわからない場合も多いため、両方のアプローチをとることをおすすめします。この記事においても、両方のアプローチで進めることにします。</p>



<h2><strong>距離を類似度とみなす。</strong></h2>



<p>続いて、クラスター分析における距離について説明します。クラスター分析は似た者同士に分類する手法ですが、それには要素間の類似度を定量的に測定する必要があります。そして類似度は、要素間の距離として定量的に測定することが可能です。例えば、あるクラスの生徒の身長と体重のデータを二次元平面にプロットしたとします。その中で、似た体格の生徒は距離的に近い場所にプロットされるはずです。これが、類似度を距離で測定できるということです。すなわち<strong>要素間の距離を類似度とみなす</strong>ことができるということになります。</p>



<p>ところで、数学やデータサイエンスで使う距離にはいくつかの種類があります。日常で用いる距離は、数学的には<strong>ユークリッド距離（Euclidean Distance）</strong>と呼ばれるもので、要素Aと要素Bの二点間の距離は、二次元平面であればピタゴラスの定理により計算することが可能です。これをN次元に拡張にすると、以下の数式で表現されることになります。</p>







<p>$$d(A, B) =\sqrt{(A_1-B_1)^2+&#8230;+(A_n-B_n)^2}\\$$</p>



<p>数学の世界では、ユークリッド距離以外にも、マハラノビス距離やコサイン距離など多数の距離が存在します。ここでは距離の深掘りは避けておきますが、ユークリッド距離以外の距離の捉え方がある、ということを理解するために、マハラノビス距離について簡単に触れておきます。<strong>マハラノビス距離（Mahalanobis&#8217; Distance）</strong>は、<strong>相関性を考慮した</strong>距離の捉え方です。</p>



<p>先ほどの例で、あるクラスの生徒の身長と体重のデータを二次元平面にプロットした場合に、似た体格の生徒は距離的に近い場所にプロットされると言いました。では身長も体重も平均的な生徒Aさんから見た場合に等距離にいる生徒は、みな体格の類似度は同じに見えると言えるでしょうか。たとえば、Aさんよりも身長が高く体重も重いBさんと、Aさんよりも身長は低いものの体重が重いCさんがいた場合に、Aさんからの距離がBさんとCさんで同じになることがありますが、Bさんの体型はAさんと比較的似ているものの、Cさんはかなり太っているように見えるはずです。</p>



<p>これは、身長と体重の間に相関がある、すなわち身長が高くなるほど体重も重たくなるという性質によるものです。この場合は相関性を考慮し、相関の強い方向の距離を、実際のユークリッド距離よりも相対的に短く測定することで、実態に近い類似度を表現することが可能となります。これがマハラノビス距離の考え方です。</p>



<p>実際のデータ分析においては、先ほどの身長と体重のように、データの変数間に相関が存在することが少なくありません。その場合はマハラノビス距離を用いるべき、という話になりそうですが、実際にはほとんど用いることはありません。なぜならクラスター分析では、身長と体重のように<strong>強い相関をもつ変数の存在は冗長で無意味であり、予めどちらかを除外する</strong>からです。言い方を変えると、クラスター分析を行うプロセスにおいては、変数間の相関性を予め分析しておく必要があるということになります。</p>



<p>以上の考え方を踏まえ、次回以降でクラスター分析の実践を進めて行きます。</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>
