<?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>Data &#8211; uxmeetsdata.com</title>
	<atom:link href="https://uxmeetsdata.com/category/data/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>いまさら聞けない音声AI</title>
		<link>https://uxmeetsdata.com/voice-ai/</link>
				<pubDate>Sat, 24 Aug 2019 11:00:06 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Deep Learning]]></category>
		<category><![CDATA[Expert System]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=12659</guid>
				<description><![CDATA[人が関与しないコミュニケーション。 2018年5月のGoogle I/Oで、音声アシスタント（Voice As...<p class="more-link"><a href="https://uxmeetsdata.com/voice-ai/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<h2><strong>人が関与しないコミュニケーション。</strong></h2>



<p>2018年5月のGoogle I/Oで、<strong>音声アシスタント（Voice Assistance）</strong>のGoogle Assistantの拡張サービスとして、電話代行サービスである<strong>Google Duplex</strong>が発表され、そこで行われたデモは世界に衝撃を与えました。それはAIが利用者に代わって飲食店や美容室に電話予約を入れるというもので、やりとりの音声だけを聞くと、どちらが人間かもわからないくらいに自然な会話となっており、従来の一問一答のものとは一線を画していることがわかります。</p>



<p>一方で、<strong>自動音声応答装置（Interactive Voice Response：IVR）</strong>による電話受付の自動化も進んでおり、近い将来、音声アシスタントとIVRによる<strong>人が関与しない通話コミュニケーション</strong>が実現するかもしれません。</p>



<p>このような新しいユーザー体験が実現する背景には、音声認識技術の進歩があります。そこで今回は、音声認識を中心としたテクノロジーや<strong>人工知能（Artifical Intelligence：AI）</strong>の、現在の動向や未来の可能性について言及しようと思います。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/08/xmd_voice_ai-e1566708646964-1024x512.jpeg" alt="" class="wp-image-12657" width="480" height="240"/></figure></div>



<h2><strong>隠れマルコフモデルによる音声認識。</strong></h2>



<p>そもそも<strong>音声認識（Voice Recognition）</strong>とは、人間が発する音声情報としての自然言語をコンピューターに認識させることであり、音声情報を文字情報に変換したり、発言者や発言内容の特徴をとらえて識別するなどの機能を実現します。</p>



<p>音声認識技術の歴史は長く、前回の「<a href="https://uxmeetsdata.com/voice-ui/">いまさら聞けない音声UI</a>」でも触れた通り、1960年代初期にIBM社により開発されたShoeboxがそのルーツだと言われています。それが消費者向けに商品化されたのはそこから約半世紀後のこと、Apple社が2011年に発売したiPhone 4Sに搭載された音声アシスタントのSiriがそれでしょう。ただし、当時は音声認識の精度が低く、実用にはまだ遠いものであったことも事実です。</p>



<p>それがここ数年で状況が大きく変化し、音声認識の精度は格段に上昇しました。それに伴い、前述のGoogle社のGoogle Assistantや、Amazon社のAlexaなど、大手IT各社の音声アシスタントが登場し、今なお発展と進化を続けています。その背景では、どのようなブレイクスルーが起きていたのでしょうか。</p>



<p>音声認識技術の本質は、空気の振動である音声からパターンや特徴を抽出し、発言者や発言内容を識別することにあります。その際、過去のデータから学習したモデルをもとに推論を行うわけですが、そこでは主に<strong>隠れマルコフモデル</strong>が利用されています。<strong>隠れマルコフモデル（Hidden Markov Model：HMM）</strong>とは、直前の結果のみから次の結果が確率的に求まるというマルコフ性を仮定して事象をモデル化する手法です。これにより、最後に発話された言語の要素から次に発話される言語の要素を確率的に推論することで認識精度を向上させることが可能となります。</p>



<p>ただし、この手法は<strong>確率に基づく推論モデルを事前に構築しておく</strong>必要があります。すなわち<strong>エキスパートシステム（Expert System）</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/expert-system/">再考するエキスパートシステム</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>知識ベース（Knowledge Base）</strong>が必要であり、その構築には膨大な時間と労力を要します。</p>



<p>またそれゆえに、会議やプレゼンのような<strong>比較的正確な文法や標準的な語彙が使われるビジネス会話</strong>には対応できますが、<strong>文法的に崩されたりスラングが多用される日常会話</strong>に対応することが極めて難しいという欠点があります。</p>



<h2><strong>深層学習による音声認識。</strong></h2>



<p>その欠点を克服する技術として、いま急速に進化しているのが、深層学習による音声認識です。<strong>深層学習（Deep Learning）</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/deep-learning/">いまさら聞けない深層学習</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>多層ニューラルネットワーク（Deep Neural Network：DNN）</strong>を用いた機械学習の手法で、コンピューターが自ら特徴表現を行うことが最大の特長です。これにより、モデルの中身がブラックボックス化されるという欠点はあるものの、多用な文法表現や語彙表現に対応する推論モデルの構築が可能となり、日常会話のような自然な会話においても実用レベルになりつつあります。</p>



<p>深層学習により、音声認識の技術レベルは格段に上がりました。あとは多様なデータからモデルの多様性や精度を向上させたり、あるいは学習や推論にかかるコストを下げることでさらに実用性が向上していくものと思われます。これは音声認識技術そのもののブレイクスルーというよりは、例えば音声データのノイズを除去する技術や、音声データを高速に通信する技術などの周辺技術に依存するものと言えるでしょう。</p>



<p>とはいえ、ここでいう音声認識とはあくまで音声をパターンとして認識することであって、意味を理解するということではありません。現在のAIは「小さい子供の服」と言った場合に「小さい」が「子供」にかかるのか「服」にかかるのかを識別できません。人間であれば、慣習やそれまでの話の流れ、あるいは周囲の環境などの多様な情報からその意味を識別できます。</p>



<p>意味の理解については、音声認識だけではなくAI全体の課題であり、その実現に向けては越えるべき技術的な壁が多くあります。とはいえ、意味を理解するための背景や周辺の多様なデータは集まりつつあり、それを高速に学習する技術も向上しています。実現に向けて少しずつ近づいて行っていることは間違いないでしょう。</p>
]]></content:encoded>
										</item>
	<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>いまさら聞けない深層学習</title>
		<link>https://uxmeetsdata.com/deep-learning/</link>
				<pubDate>Sun, 26 May 2019 10:35:10 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Deep Learning]]></category>
		<category><![CDATA[Machine Learning]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=9389</guid>
				<description><![CDATA[学習とは”分ける”こと。 機械学習（Machine Learning）1)いまさら聞けない機械学習...<p class="more-link"><a href="https://uxmeetsdata.com/deep-learning/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<h2><strong>学習とは&#8221;分ける”こと。</strong></h2>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_a-e1559159870754.jpg" alt="" class="wp-image-9387" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_a-e1559159870754.jpg 719w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_a-e1559159870754-300x150.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p><strong>機械学習（Machine Learning）</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">いまさら聞けない機械学習</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>ニューラルネットワーク（Neural Network：NN）</strong>のアルゴリズムを用いたものがあります。これは<strong>人間の脳を模倣したモデル</strong>であり、この着想は1950年代ごろからあるものの、さまざまな問題から実用化には至りませんでした。その様相に変化が起きたのは2012年のことです。</p>



<p>きっかけのひとつが米Googleによる<strong>ネコの認識</strong>です。YouTubeに投稿された動画から1000万枚の画像を取り出しでニューラルネットワークに入力し、そこに内在する<strong>ネコたる特徴を自動的に抽出して抽象化</strong>することに成功しました。</p>



<p>もうひとつが2012年に開催された世界的な画像認識コンテスト「ILSVRC：ImageNet Large Scale Visual Recognition Challenge」において、カナダ・トロント大学のジェフリー・ヒントン教授のチームが開発した<strong>Super Vision</strong>が優勝したことです。ここでは、画像に写っているものが何かを自動で判別する際の<strong>誤り率</strong>を競うわけですが、前年の優勝記録である25.8%から16.4%へと約四割も削減し、二位以下を大きく離す圧勝でした。</p>



<p>このSuper Visionに勝利をもたらした技術こそが深層学習です。<strong>深層学習（Deep Learning）</strong>は、人間の脳を模倣した<strong>多層ニューラルネットワーク</strong>を用いた機械学習の手法で、コンピューターが自ら<strong>特徴表現</strong>を行うことが最大の特長です。</p>



<p>最近はやや落ち着いた感がありますが、<strong>人工知能（Artificial Intelligence：AI）</strong>あるいは機械学習という言葉を聞かない日はないくらいにバズワード化しています。これは第三次AIブームと呼ばれ、その火付け役がこの深層学習であることはいうまでもありません。すでに多くの文献や書籍でその解説が行われているため、いまさら感はありますが、<strong>機械学習や特徴表現、そしてニューラルネットワーク</strong>についておさらいしつつ、深層学習とは何か、またその可能性について考えてみたいと思います。</p>



<p>「<a href="https://uxmeetsdata.com/machine-learning/">いまさら聞けない機械学習</a>」でも触れたとおり、機械学習は人間がもつ<strong>学習能力</strong>をコンピューターで実現する技術や手法のことです。人間のあらゆる能力を対象とするのがAIであるとするならば、機械学習はその一部にすぎません。</p>



<p><strong>学習（Learning）</strong>の意味は文脈により異なりますが、とりわけ脳科学や人工知能の領域では&#8221;<strong>分ける</strong>&#8220;処理を意味します。ある事象について判断する、それが何かを認識する、などはすべて分ける処理であり、うまく分けることができれば、ものごとを理解・判断し、行動することが可能となります。また、いったん分ける基準や方法がわかれば、未知の事象を予測することも可能です。</p>



<h2><strong>自ら特徴表現を行う。</strong></h2>



<p>機械学習のアプローチの中に、人間の脳を模倣することで学習能力を実現しようとするものがあります。脳の内部では<strong>ニューロン（Neuron／神経細胞）</strong>がシナプスの結合によりネットワーク構造となっており、そこに電気が流れて情報を処理するコンピューターのようになっていることが知られています。その情報処理機構を数理モデルにしたものが<strong>多層ニューラルネットワーク</strong>であり、それを用いた機械学習の手法が深層学習です。</p>



<p><strong>多層ニューラルネットワーク（Deep Neural Network：DNN）</strong>の仕組みをもう少し詳しく説明します。あるニューロンは他のニューロンからの電気刺激をシナプスを経由して受け取り、それが一定以上たまると発火して次のニューロンに電気刺激を伝えます。これを数理モデルで表現すると、あるニューロンが他のニューロンから0か1の値を受け取り、その値に何らかの重みをかけて足し合わせ、それが<strong>一定の閾値を超えれば1、超えなければ0</strong>になり、それが次のニューロンに伝播するということになります。このモデルをニューラルネットワークといいます。ニューラルネットワークの階層は大きく、<strong>入力層</strong>・<strong>隠れ層</strong>・<strong>出力層</strong>の三つからなり、入力データは、入力層から隠れ層へ、隠れ層から出力層へと伝播されます。この隠れ層を多層にし、人間の脳の動きにより近づけたものがDNNです。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_b.png" alt="" class="wp-image-9691" width="480" height="323" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_b.png 905w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_b-300x202.png 300w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_b-768x518.png 768w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>DNNを用いた深層学習の最大の特長は、コンピューターが自ら<strong>特徴表現</strong>をすることにあります。機械学習を用いた分類や予測において、正解を決定づける要因のことを<strong>特徴量（Feature Quantity）</strong>といい、それを抽出・抽象化することを<strong>特徴表現</strong>と言います。前述のGoogleのネコの認識でいうと、<strong>ネコをネコであると識別する上で、それを決定づける特徴をつかむ</strong>ことです。他の機械学習ではこれを人間が行う必要がありますが、無数の変数から特徴をつかむ作業が困難、あるいは想定していない特徴をつかむことができないなどの問題があり、自動化には大きな意味があります。</p>



<p>これを可能にしているのが、<strong>オートエンコーダ（Auto Encoder／自己符号化器）</strong>という<strong>次元圧縮</strong>の技術です。従来、ニューラルネットワークを作るには、正解である教師データを人が与えて学習させるという訓練フェーズが必要でした。たとえば、入力に手書きの「7」という画像を与える場合、出力に「7」という正解の識別情報を与える必要があるということになります。</p>



<p>一方でオートエンコーダでは、出力に入力と同じものを与えることで、<strong>入力を再現するデータを出力するようコンピュータ自身に訓練させる</strong>ということを行います。つまり、入力に手書きの「7」という画像を与える場合、出力には全く同じ手書きの「7」を与えればよく、自動で行うことが可能です。そしてオートエンコーダは、出力が入力にできるだけ近いものになる、専門用語でいうと<strong>復元エラーが最小になるような特徴表現</strong>を自動的に探してくれます。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_c.png" alt="" class="wp-image-9674" width="480" height="96"/></figure></div>



<p>これはMNISTと呼ばれる0〜9の手書き数字の画像のデータセットでオートエンコーダを動かした場合の例です。上が入力データ、下が出力データですが、ほとんど同じような手書き数字が出力されていることがわかります。</p>



<p>DNNを用いた機械学習の発想は古くからあり、現在の深層学習につながる世界的に最も先駆的な研究に、日本のNHK放送技術研究所の福島邦彦氏によって1979年に発表された<strong>ネオコグニトロン</strong>があります。これにはコンピューターが自ら学習することによってパターン認識能力を獲得する<strong>自己組織化機能</strong>があり、応用例として手書き文字データベースから自己学習によって手書き文字認識能力が獲得されることを実証しました。</p>



<p>しかしながら、当時は手書き文字認識方式の一つと誤解され、その重要性が世間に認識されませんでした。また、大量データと膨大な計算を行う超高性能なコンピューターを必要とするために実用化には至りませんでした。それらが克服されたことと、長年の研究によるアルゴリズムの進化が融合し、深層学習として具現化され、まさにいま盛り上がりを見せています。</p>



<p>一方で、「<a href="https://uxmeetsdata.com/ux-modeling/">UXモデリングって？</a>」でも触れたとおり、深層学習には<strong>大量の学習データが必要である</strong>、<strong>導出されたモデルがブラックボックス化する</strong>などの欠点があります。また<strong>過学習による汎化性能低下</strong>の問題もあります。いま現在において深層学習が実用化されているのは、大量の学習データを獲得しやすく、かつモデルを単純化しやすい画像処理などの一部の領域に限られているというのが現実です。</p>



<h2><strong>人の&#8221;目&#8221;となる深層学習技術。</strong></h2>



<p>そうだとしても、多くの問題解決に深層学習が有効であることが認められており、実用化が進んでいます。とりわけ重要なのは<strong>人の”目”の代わりになること</strong>であり、人手不足や働き方、高齢化などが大きな社会問題となる中で、もはや欠かすことができない技術となりつつあります。</p>



<p>大手コンビニエンスストアでは、24時間営業を見直す検討がなされており、既に数百店舗での実証実験が行われています。人手不足や加盟店の過酷な労働環境を是正することが目的ですが、一方で24時間営業をやめると利便性が低下し、他のチェーンや店舗に顧客を奪われるリスクもあるため、大きなジレンマに陥っています。そこで期待がかかるのが無人店舗の実現です。</p>



<p>米Amazon.comの「Amazon Go」が話題となり、中国でも無人コンビニが増加していますが、国内でもレジなし店舗を実現するための技術や製品の開発が進んでいます。2017年11月に、東日本旅客鉄道（JR東日本）の大宮駅にレジなし店舗が登場しましたが、これはサインポスト社が開発した「スーパーワンダーレジ」の実証実験店舗です。利用者が棚から商品を取ると、棚などに取り付けられたカメラがその状況を捉え、AIが識別して購入金額を自動的に計算します。利用者はレジで交通系ICカードをタッチするだけで精算が完了します。ここに深層学習の画像識別技術が活用されています。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_d-1024x538.jpg" alt="" class="wp-image-9718" width="480" height="252" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_d-1024x538.jpg 1024w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_d-300x158.jpg 300w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_d-768x403.jpg 768w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_d.jpg 1200w" sizes="(max-width: 480px) 100vw, 480px" /><figcaption>出典：日経 xTECH</figcaption></figure></div>



<p>また最近では高齢者による自動車事故が相次いでおり、連日報道されるなど、社会問題として顕在化しつつあります。実際には高齢者よりも若年層のほうが事故率が高く、流通している情報や分析に偏りが見られるものの、今後の超高齢化社会では高齢者の母数が増大するため、率以上に数が問題となることは明白です。</p>



<p>環境問題も含めると、そもそもマイカーに依存しない交通インフラを目指すべきという考え方もあります。一方で、電気や水道などの生活インフラと同様、人口減少に伴う維持コストの問題もあり、<strong>コンパクトシティ</strong>の実現と合わせて考える必要があります。日本よりも一足先に高齢化社会に突入したドイツやフランスなどの欧州各国では、トラム（路面電車）を中核としたコンパクトシティ構想を国家レベルで実証実験しています。日本でも取り組みは進められているものの、実現には多くの時間とコストを要します。</p>



<p>それを待たずして到来する超高齢化社会における交通問題に対して、現時点でもっとも有効かつ現実的な解が<strong>自動運転</strong>です。大手自動車メーカーはIT企業と協力しながら自動運転の実用化に向けた研究開発を進めていますが、当然ながらここでも<strong>人の”目”の代わりになる技術</strong>が重要となります。</p>



<p>本田技研工業（ホンダ）はすべての人に事故ゼロと自由な移動の喜びを提供するために自動運転の研究開発に取り組んでおり、マイカーのレベル４自動運転技術の確率を目指しています。レベル４自動運転技術とは、緊急時にも運転手が対応せず、コンピューターが主体として全責任を持つ、すなわち運転手が運転操作に参加することを前提としないというものです。ただし限定エリア内の制限があるため、エリア外での運転を想定し、ハンドル・アクセル・ブレーキなどは設備します。</p>



<p>ホンダは車体の前・左前・右前に設置された三台のカメラで視覚情報を取得し、深層学習により物体や距離の識別を行うことで、自動運転のための状況の理解と判断を実現しようとしています。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_e.jpg" alt="" class="wp-image-9741" width="480" height="269" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_e.jpg 968w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_e-300x169.jpg 300w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_dl_e-768x432.jpg 768w" sizes="(max-width: 480px) 100vw, 480px" /><figcaption>出典：レスポンス</figcaption></figure></div>



<p>このように深層学習は、人の&#8221;目&#8221;となることで、現代社会が抱える問題を解決し、生活をサポートする技術として高い可能性を秘めています。AIが人の仕事を奪うということがうるさく言われていますが、すべての技術革新は何らかの形で従来の仕事を自動化・代替してきたわけであり、AIだけが特別なものではありません。人間がやらなくてもよい作業をAIに代替させ、より創造的なことに時間を使えるようになるということです。</p>
]]></content:encoded>
										</item>
	</channel>
</rss>
