<?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>Machine Learning &#8211; uxmeetsdata.com</title>
	<atom:link href="https://uxmeetsdata.com/tag/machine-learning/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>BigQuery ML 試し打ち #04</title>
		<link>https://uxmeetsdata.com/bigquery-ml-trial-04/</link>
				<pubDate>Sun, 11 Aug 2019 11:00:26 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=12598</guid>
				<description><![CDATA[クラスターごとに特徴量を集計。 BigQuery MLと総合ECサイトの会員の購買履歴データを用いた会員のクラ...<p class="more-link"><a href="https://uxmeetsdata.com/bigquery-ml-trial-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/06/xmd_bq_ml.png" alt="" class="wp-image-10864" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/06/xmd_bq_ml.png 640w, https://uxmeetsdata.com/wp-content/uploads/2019/06/xmd_bq_ml-300x150.png 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<h2><strong>クラスターごとに特徴量を集計。</strong></h2>



<p>BigQuery MLと総合ECサイトの会員の購買履歴データを用いた会員のクラスタリングを試みていますが、前回「<a href="https://uxmeetsdata.com/bigquery-ml-trial-03/">BigQuery ML 試し打ち #03</a>」でモデルの作成まで完了したので、今回は<strong>モデルの可視化</strong>と<strong>予測結果の出力</strong>を行います。</p>



<p>可視化するには、クラスターと特徴量のクロス集計表にする必要があります。BigQueryのクエリエディタに以下のSQL文を入力し、青い［実行］ボタンをクリックしてみましょう。このクエリ結果をデータセット「DE」に「sum_clusters_bqml」という名前で保存します。</p>



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



<h2><strong>モデルを可視化する。</strong></h2>



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



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



<p>クラスターごとの特徴を見ると、クラスターID:6は女性のみ、平均年齢は30歳程度、主に「エレクトロニクス・コンピューター」を購入しているセグメント、クラスターID:9は男性80%、平均年齢は40歳程度、主に「本・聞く本」「映画・音楽・ゲーム」「エレクトロニクス・コンピューター」を購入しているセグメント、などがわかります。また、年齢についてもクラスターごとにばらつきがあり、クラスターID:2は年齢層がやや高め、クラスターID:10は年齢層がやや低めなどの特徴があります。これらは「<a href="https://uxmeetsdata.com/clustering-howto-04/">クラスター分析入門</a>」で見られた特徴とは異なることがわかります。</p>



<h2><strong>どのクラスターかを予測する。</strong></h2>



<p>続いて、作成したモデルを使って、特定の特徴をもつ会員がどのクラスターに分類されるかの予測を行い、結果を出力します。それにはBigQuery MLで用意されている<strong>ML.PREDICT</strong>という関数を使用し、以下の構文で記述します。</p>



<pre class="wp-block-preformatted"><strong>SELECT</strong> <em>出力したい変数</em>
<strong>FROM</strong> <strong>ML.PREDICT</strong>(
  MODEL <em>モデル名</em>
  , (
    <strong>SELECT</strong> *
    <strong>FROM</strong> <em>機械学習用データテーブル</em>
    <strong>WHERE</strong> <em>予測対象の会員の条件</em>
  )
)</pre>



<p>ではまず、男性で「本・聞く本」「映画・音楽・ゲーム」「エレクトロニクス・コンピューター」の購買経験がある会員がどのクラスターに分類されるかを予測します。BigQueryのクエリエディタに以下のSQL文を入力し、青い［実行］ボタンをクリックしてみましょう。</p>



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



<p>この結果から、すべての会員がクラスターID:9として予測されることがわかります。これはさきほど可視化したモデルと完全に一致します。</p>



<p>続けて、女性で「エレクトロニクス・コンピューター」の購買経験がある会員がどのクラスターに分類されるかを予測します。BigQueryのクエリエディタに以下のSQL文を入力し、青い［実行］ボタンをクリックしてみましょう。</p>



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



<p>この結果から、約90%の会員がクラスターID:6として予測されることがわかります。これはさきほど可視化したモデルとほぼ一致しますが、残りの約10%の会員がクラスターID:2として予測されています。それらの会員の特徴を見ると、比較的年齢の高い会員が多いように見受けられます。これはモデルの可視化結果で見た、クラスターID:2の年齢層がやや高めという評価と一致します。</p>



<p>そこで、年齢を20代から40代に限定した場合に、会員がどのクラスターに分類されるかを予測します。BigQueryのクエリエディタに以下のSQL文を入力し、青い［実行］ボタンをクリックしてみましょう。</p>



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



<p>この結果から、すべての会員がクラスターID:6として予測されることがわかります。これはさきほど可視化したモデルと完全に一致します。</p>



<p>BigQuery MLと総合ECサイトの会員の購買履歴データを用いた会員のクラスタリングを試みをしましたが、BigQuery上で完結して簡単に実現できることがわかりました。現時点で扱えるモデルは線形回帰・ロジスティック回帰・k 平均法クラスタリングのみですが、今後は協調フィルタリングやTensorFlowを用いたディープニューラルネットワークなど扱えるモデルも増えていくことが予定されているので、期待して待ちたいと思います。</p>
]]></content:encoded>
										</item>
	<item>
		<title>BigQuery ML 試し打ち #03</title>
		<link>https://uxmeetsdata.com/bigquery-ml-trial-03/</link>
				<pubDate>Sat, 10 Aug 2019 11:00:16 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=12532</guid>
				<description><![CDATA[SQLによるクラスタリング。 BigQuery MLは、Googleが提供するデータウェアハウス（Data W...<p class="more-link"><a href="https://uxmeetsdata.com/bigquery-ml-trial-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/06/xmd_bq_ml.png" alt="" class="wp-image-10864" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/06/xmd_bq_ml.png 640w, https://uxmeetsdata.com/wp-content/uploads/2019/06/xmd_bq_ml-300x150.png 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<h2><strong>SQLによるクラスタリング。</strong></h2>



<p><strong>BigQuery ML</strong>は、Googleが提供する<strong>データウェアハウス（Data Warehouse：DWH）</strong>である<strong>Google BigQuery</strong>上にて<strong>機械学習（Machine Learning：ML）</strong>を可能とするクラウドサービスです。最大の特徴は、モデルの作成から評価や予測までをBigQueryと同様の<strong>標準SQLによるクエリ形式</strong>で行う点です。これにより、データの準備を含めた機械学習のすべてのプロセスをBigQuery上でSQLのみで完結することが可能となり、作業効率やセキュリティの面で大きなメリットが得られます。</p>



<p>前回の「<a href="https://uxmeetsdata.com/bigquery-ml-trial-01/">BigQuery ML 試し打ち</a>」ではロジスティック回帰モデルを用いて、総合ECサイトの会員の継続予測を行いました。今回は先日ベータ版がリリースされた<strong>k平均法クラスタリング</strong>のモデルの試し打ちがてら、例によって「<a href="https://uxmeetsdata.com/data-ethnography-howto-01/">データエスノグラフィ入門</a>」と連動し、総合ECサイトの会員のクラスタリングを行なってみようと思います。</p>



<p>なお、同じテーマを「<a href="https://uxmeetsdata.com/clustering-howto-01/">クラスター分析入門</a>」で扱っており、<strong>クラスター分析（Cluster Analysis）</strong>あるいは<strong>クラスタリング（Clustering）</strong>とは何か、<strong>階層型</strong>と<strong>非階層型</strong>の違いは何かなどの詳細はそちらに詳しいので、ここでは省略します。また分析ツールについては、そこでは<strong>Google Cloud Datalab</strong>を用いましたが、ここでは<strong>BigQuely ML</strong>を用いるため、どちらも試しながら両方の違いを検証するのもよいでしょう。</p>



<h2><strong>機械学習用のデータと環境を準備。</strong></h2>



<p>それではBigQuery MLを用いたクラスタリングを始めましょう。分析を進める前に、まずは分析の背景と目的を整理します。</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>



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



<p>なお、クラスタリングにおいて<strong>強い相関をもつ変数の存在は冗長で無意味であり、予めどちらかを除外する</strong>必要がありますが、これらの各変数間に相関性が見られないことは確認済みとします。（※「<a href="https://uxmeetsdata.com/clustering-howto-02/">クラスター分析入門 #02</a>」を参照）</p>



<p>次にクラスタリング用のデータを用意するわけですが、ここでひとつ前処理が必要になります。クラスタリングでは<strong>要素間の距離を類似度とみなす</strong>ことで類似性を分析するのですが、距離を測定するためには変数が数値化されている必要があります。しかしながら、性別や購買商品カテゴリは質的変数であるため、そのままでは数値として扱うことができません。そこで<strong>ダミー変数（Dummy Variable）</strong>に置き換えます。また、年齢は量的変数であるため、説明変数として扱うことが可能ですが、クラスタリングに使うには他の説明変数と値の範囲を揃える必要があります。そこで<strong>正規化（Normalization）</strong>を行います。ダミー変数と正規化については「<a href="https://uxmeetsdata.com/clustering-howto-02/">クラスター分析入門 #02</a>」に詳しいので省略します。</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」という名前で保存します。これで分析用のデータと環境は整いました。</p>



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



<h2><strong>モデルを作成する。</strong></h2>



<p>データの準備が整ったので、クラスタリングを進めて行きます。まずはモデルの作成を行います。モデルの作成には、BigQuery MLで用意されている<strong>CREATE MODEL</strong>という関数を使用し、以下の構文で記述します。なおクラスタリングは教師なし学習のため、正解を示す目的変数は存在せず、また訓練データと評価用データに分割する必要はありません。</p>



<pre class="wp-block-preformatted"><strong>CREATE OR REPLACE MODEL</strong> <em>データセット名</em>.<em>モデル名 </em>
<strong>OPTIONS</strong>( 
  model_type = <em>使用するモデリングタイプ</em>
  ,num_clusters = <em>クラスター数</em>
  ,standardize_features = <em>真偽値</em>
) <strong>AS</strong> (
  <strong>SELECT</strong> <em>説明変数</em>, ...
  <strong>FROM</strong> <em>機械学習用データテーブル</em>
)</pre>



<p>［model_type］には<strong>k平均法クラスタリング</strong>を示す［kmeans］を指定します。クラスター数を指定するオプションの［num_clusters］には妥当性が確認されているである10を指定します。（※「<a href="https://uxmeetsdata.com/clustering-howto-03/">クラスター分析入門 #03</a>」を参照）また、［standardize_features］は正規化を行うかどうかのオプションで、すでに処理済みですがTRUEを指定しておきます。なお、初期設定はTRUE であるため省略可能です。</p>



<p>BigQueryのクエリエディタに以下のSQL文を入力し、青い［実行］ボタンをクリックしてみましょう。なおこのクエリ結果はデータセット「DE」に「mdl_members_cls」という名前で自動的に保存されます。</p>



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



<p>これでモデルの作成は完了です。次回は作成したモデルの可視化や予測結果の出力を行います。</p>
]]></content:encoded>
										</item>
	<item>
		<title>BigQuery ML 試し打ち #02</title>
		<link>https://uxmeetsdata.com/bigquery-ml-trial-02/</link>
				<pubDate>Thu, 20 Jun 2019 12:21:54 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=10974</guid>
				<description><![CDATA[モデルを評価する。 BigQuery MLと総合ECサイトの会員の購買履歴データを用いて、一年間の購買傾向から...<p class="more-link"><a href="https://uxmeetsdata.com/bigquery-ml-trial-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/06/xmd_bq_ml.png" alt="" class="wp-image-10864" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/06/xmd_bq_ml.png 640w, https://uxmeetsdata.com/wp-content/uploads/2019/06/xmd_bq_ml-300x150.png 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<h2><strong>モデルを評価する。</strong></h2>



<p>BigQuery MLと総合ECサイトの会員の購買履歴データを用いて、一年間の購買傾向から、翌年も継続して購買する会員を予測するという試みをしていますが、前回「<a href="https://uxmeetsdata.com/bigquery-ml-trial-01/">BigQuery ML 試し打ち #01</a>」で予測モデルの作成まで完了したので、今回は<strong>モデルの評価</strong>と<strong>予測結果の出力</strong>、さらに<strong>重みの分析</strong>を行います。</p>



<p>まずは予測モデルの評価を行いますが、それにはBigQuery MLで用意されている<strong>ML.EVALUATE</strong>という関数を使用し、以下の構文で記述します。</p>



<pre class="wp-block-preformatted"><strong>SELECT</strong> * 
<strong>FROM</strong> <strong>ML.EVALUATE</strong>(
  MODEL <em>モデル名</em>
  , (
    <strong>SELECT</strong> <em>目的変数</em>, <em>説明変数</em>, ...   
    <strong>FROM</strong> <em>機械学習用データテーブル</em>
    <strong>WHERE</strong> <em>評価データを指定</em>
  )
)</pre>



<p>モデル作成時と同様、目的変数は列名を「label」で指定するルールのため「retention」をそれに置き換えます。説明変数には「性別・年齢・購買商品カテゴリ・購買頻度・購買金額」を指定するため、それ以外は除外します。BigQueryのクエリエディタに以下のSQL文を入力し、青い［実行］ボタンをクリックしてみましょう。</p>



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



<p>すると、クエリ結果に以下のような表が出力されるかと思います。</p>



<table style="table-layout: fixed; width: 100%;">
<tbody>
<tr style="color: #fff; background-color: #000;">
<td style="width: 100px;">項目</td>
<td style="width: 200px;">値</td>
</tr>
<tr>
<td style="background-color: #eee;">precision</td>
<td style="text-align:left;">0.8941798941798942</td>
</tr>
<tr>
<td style="background-color: #eee;">recall</td>
<td style="text-align:left;">0.5014836795252225</td>
</tr>
<tr>
<td style="background-color: #eee;">accuracy</td>
<td style="text-align:left;">0.7704517704517705</td>
</tr>
<tr>
<td style="background-color: #eee;">f1_score</td>
<td style="text-align:left;">0.6425855513307985</td>
</tr>
<tr>
<td style="background-color: #eee;">log_loss</td>
<td style="text-align:left;">0.5168232647120398</td>
</tr>
<tr>
<td style="background-color: #eee;">roc_auc</td>
<td style="text-align:left;">0.832985</td>
</tr>
</tbody>
</table>



<p>これらの項目と値の意味を簡単に解説しますが、その前に二項分類の予測と結果のマトリクスについて理解をしておく必要があります。それは以下の表で整理できます。</p>



<table style="table-layout: fixed; width: 100%;">
<tbody>
<tr style="background-color: #eee;">
<td rowspan="2" colspan="2"></td><td colspan="2">結果</td>
</tr>
<tr style="background-color: #eee;">
<td>TRUE</td><td>FALSE</td>
</tr>
<tr>
<td rowspan="2" style="background-color: #eee;">予測</td><td style="background-color: #eee;">TRUE</td><td>真陽性</td><td>偽陽性</td>
</tr>
<tr>
<td style="background-color: #eee;">FALSE</td><td>偽陰性</td><td>真陰性</td>
</tr>
</tbody>
</table>



<ul><li><strong>真陽性</strong>：TRUEの結果を正しくTRUEと予測</li><li><strong>真陰性</strong>：FALSEの結果を正しくFALSEと予測</li><li><strong>偽陽性</strong>：FALSEの結果を誤ってTRUEと予測</li><li><strong>偽陰性</strong>：TRUEの結果を誤ってFALSEと予測</li></ul>



<p>このマトリクスを基に、評価結果の［precision］［recall］［accuracy］［f1_score］の各項目の意味を以下のように説明することができます。またそれぞれの値は0から1の実数となり、1に近くほど精度が高いことを意味します。</p>



<table style="table-layout: fixed; width: 100%;">
<tbody>
<tr style="color: #fff; background-color: #000;">
<td colspan="2" style="width: 200px;">項目</td>
<td>意味</td>
</tr>
<tr>
<td>precision</td>
<td>適合率</td>
<td>（真陽性）／（真陽性＋偽陽性）</td>
</tr>
<tr>
<td>recall</td>
<td>再現率</td>
<td>（真陽性）／（真陽性＋偽陰性）</td>
</tr>
<tr>
<td>accuracy</td>
<td>正解率</td>
<td>（真陽性＋真陰性）<br>／（真陽性＋真陰性＋偽陽性＋偽陰性）</td>
</tr>
<tr>
<td>f1_score</td>
<td>F値</td>
<td>２×（適合率×再現率）<br>／（適合率＋再現率）</td>
</tr>
</tbody>
</table>



<p>すなわち今回の予測モデルの評価結果としては、<strong>正解率は77%</strong>であり、TRUEと予測したものが結果としてTRUEであった確率を示す<strong>適合率は89%</strong>と非常に高いものの、結果が TRUEであるものを正しくTRUEと予測した確率を示す<strong>再現率は50%</strong>に止まった、ということになります。</p>



<h2><strong>継続か否かを予測する。</strong></h2>



<p>続いて、作成した予測モデルを使って、評価データに対する「継続か否か」の予測を行い、結果を出力します。それにはBigQuery MLで用意されている<strong>ML.PREDICT</strong>という関数を使用し、以下の構文で記述します。</p>



<pre class="wp-block-preformatted"><strong>SELECT</strong> <em>出力したい変数</em>
<strong>FROM</strong> <strong>ML.PREDICT</strong>(
  MODEL <em>モデル名</em>
  , (
    <strong>SELECT</strong><em><strong> *</strong></em>
    <strong>FROM</strong> <em>機械学習用データテーブル</em>
    <strong>WHERE</strong> <em>評価データを指定</em>
  )
)</pre>



<p>構文としては評価の場合とおおむね同じですが、機械学習用データテーブルから抽出する項目には、最終的に出力したい変数を含めておく必要があります。BigQueryのクエリエディタに以下のSQL文を入力し、青い［実行］ボタンをクリックしてみましょう。</p>



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



<p>すると、以下のスキーマのテーブルが出力されます。レコードは会員ID単位で、predicted_labelが<strong>予測結果</strong>となります。predicted_label_probs.probは真偽それぞれの予測の確からしさの値であり、高いほうが予測結果として選択されます。</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;">predicted_label</td>
<td>予測結果</td>
<td>真偽</td>
</tr>
<tr>
<td style="background-color: #eee;">predicted_label_probs.label</td>
<td>予測の確からしさの項目</td>
<td>真偽</td>
</tr>
<tr>
<td style="background-color: #eee;">predicted_label_probs.prob</td>
<td>予測の確からしさの値</td>
<td>実数（0〜1）</td>
</tr>
<tr>
<td style="background-color: #eee;">member_id</td>
<td>会員ID</td>
<td>整数</td>
</tr>
</tbody>
</table>



<h2><strong>重みを分析する。</strong></h2>



<p>最後に重みの分析を行います。<strong>重み（Weight）</strong>とは結果の決定に対する影響力のことであり、それが大きい説明変数がわかれば、意図する結果を再現しやすくなります。機械学習の目的は、予測結果を導出することでもありますが、重みの大きい説明変数を発見することでもあります。それにはBigQuery MLで用意されている<strong>ML.WEIGHT</strong>という関数を使用し、以下の構文で記述します。</p>



<pre class="wp-block-preformatted"><strong>SELECT</strong> * 
<strong>FROM</strong> <strong>ML.WEIGHT</strong>(
  MODEL <em>モデル名</em>
  ORDER BY ABS( weight ) DESC
)</pre>



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



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



<p>すると、クエリ結果に以下のような表が出力されるかと思います。</p>



<table style="table-layout: fixed; width: 100%;">
<tbody>
<tr style="color: #fff; background-color: #000;">
<td>processed_input</td>
<td>weight</td>
<td>category_weights.category</td>
<td>category_weights.weight</td>
</tr>
<tr>
<td>__INTERCEPT__</td>
<td>-1.198761487350279</td>
<td style="background-color: #eee;"></td>
<td style="background-color: #eee;"></td>
</tr>
<tr>
<td>frequency</td>
<td>0.26443061661515105</td>
<td style="background-color: #eee;"></td>
<td style="background-color: #eee;"></td>
</tr>
<tr>
<td>age</td>
<td>-5.464877050426754E-4</td>
<td style="background-color: #eee;"></td>
<td style="background-color: #eee;"></td>
</tr>
<tr>
<td>monetary</td>
<td>1.4273789647951177E-5</td>
<td style="background-color: #eee;"></td>
<td style="background-color: #eee;"></td>
</tr>
<tr>
<td>gender</td>
<td></td>
<td>女性</td>
<td>-0.06224747387551884</td>
</tr>
<tr>
<td style="background-color: #eee;"></td>
<td style="background-color: #eee;"></td>
<td>男性</td>
<td>-0.0016923874680583803</td>
</tr>
<tr>
<td>category</td>
<td></td>
<td>おもちゃ・子供・赤ちゃん</td>
<td>-0.27861305570603795</td>
</tr>
<tr>
<td style="background-color: #eee;"></td>
<td style="background-color: #eee;"></td>
<td>映画・音楽・ゲーム</td>
<td>0.12202359844247163</td>
</tr>
<tr>
<td style="background-color: #eee;"></td>
<td style="background-color: #eee;"></td>
<td>本・聞く本</td>
<td>0.006707035351433535</td>
</tr>
<tr>
<td style="background-color: #eee;"></td>
<td style="background-color: #eee;"></td>
<td>スポーツ・アウトドア</td>
<td>0.02979014651640284</td>
</tr>
<tr>
<td style="background-color: #eee;"></td>
<td style="background-color: #eee;"></td>
<td>エレクトロニクス・コンピューター</td>
<td>-0.04263333605516763</td>
</tr>
<tr>
<td style="background-color: #eee;"></td>
<td style="background-color: #eee;"></td>
<td>美容・健康・食料品</td>
<td>-0.03431735605454703</td>
</tr>
<tr>
<td style="background-color: #eee;"></td>
<td style="background-color: #eee;"></td>
<td>自動車・工業</td>
<td>-0.08863931077413578</td>
</tr>
<tr>
<td style="background-color: #eee;"></td>
<td style="background-color: #eee;"></td>
<td>ファッション・ジュエリー</td>
<td>0.04375393071659543</td>
</tr>
<tr>
<td style="background-color: #eee;"></td>
<td style="background-color: #eee;"></td>
<td>家庭・ガーデニング用品</td>
<td>-0.029685028287024184</td>
</tr>
</tbody>
</table>



<p>重みは、正の場合は値が大きいほど、その変数が目的変数の真値への影響力が強く、逆に負の場合は値が小さいほど、目的変数の偽値への影響力が強いことを意味します。この結果から、やはり<strong>購買金額</strong>（Monetary）と<strong>購買頻度</strong>（Frequency）が目的変数の真値への影響力が強い、すなわち購買金額や頻度が高い会員ほど継続する可能性が高いことがわかります。逆に<strong>年齢</strong>（Age）が目的変数の偽値への影響力が強い、すなわち年齢が高い会員ほど離反する可能性が高いことがわかります。</p>



<p>BigQuery MLと総合ECサイトの会員の購買履歴データを用いて、一年間の購買傾向から、翌年も継続して購買する会員を予測するという試みをしましたが、BigQuery上で完結して簡単に実現できることがわかりました。現時点で扱えるモデルは線形回帰・ロジスティック回帰・k 平均法クラスタリングのみですが、今後は協調フィルタリングやTensorFlowを用いたディープニューラルネットワークなど扱えるモデルも増えていくことが予定されているので、期待して待ちたいと思います。</p>
]]></content:encoded>
										</item>
	<item>
		<title>BigQuery ML 試し打ち #01</title>
		<link>https://uxmeetsdata.com/bigquery-ml-trial-01/</link>
				<pubDate>Wed, 19 Jun 2019 05:10:35 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=10862</guid>
				<description><![CDATA[SQLで機械学習。 BigQuery MLは、Googleが提供するデータウェアハウス（Data Wareho...<p class="more-link"><a href="https://uxmeetsdata.com/bigquery-ml-trial-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/06/xmd_bq_ml.png" alt="" class="wp-image-10864" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/06/xmd_bq_ml.png 640w, https://uxmeetsdata.com/wp-content/uploads/2019/06/xmd_bq_ml-300x150.png 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<h2><strong>SQLで機械学習。</strong></h2>



<p><strong>BigQuery ML</strong>は、Googleが提供する<strong>データウェアハウス（Data Warehouse：DWH）</strong>である<strong>Google BigQuery</strong>上にて<strong>機械学習（Machine Learning：ML）</strong>を可能とするクラウドサービスです。最大の特徴は、モデルの作成から評価や予測までをBigQueryと同様の<strong>標準SQLによるクエリ形式</strong>で行う点です。これにより、データの準備を含めた機械学習のすべてのプロセスをBigQuery上でSQLのみで完結することが可能となり、作業効率やセキュリティの面で大きなメリットが得られます。</p>



<p>現時点で扱えるモデルは<strong>線形回帰</strong>・<strong>ロジスティック回帰</strong>・<strong>k 平均法クラスタリング</strong>のみですが、扱えるモデルは今後増えていくことが予定されています。</p>



<p>ベータ版リリースから一年近くが経過しており、いまさら試し打ちというのも変ですが、一般提供されたのを受けて、復習もかねてその触り心地をまとめておきます。それではBigQuery MLを用いた機械学習を始めましょう。</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に投入済みとします。</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>2012年の一年間の購買傾向から、2013年も継続して購買する会員を予測</strong>してみます。</p>



<h2><strong>機械学習用のデータと環境を準備。</strong></h2>



<p>分析を進める前に、まずは分析手法を決めます。売上や継続率などの数値予測の場合は<strong>線形回帰（Linear Regression）</strong>を用いますが、「継続か否か」のような二項分類の場合は<strong>ロジスティック回帰（Logistic Regression）</strong>を用います。</p>



<p>また、予測対象の変数を<strong>目的変数（Objective Variable）</strong>といい、今回は「継続か否か」がそれになります。その結果を決定づける原因となる変数を<strong>説明変数（Explanatory Variable）</strong>といい、機械学習では<strong>特徴量（Feature Value）</strong>とも言います。説明変数は無数に存在しますが、結果の決定に対する影響力を<strong>重み（Weight）</strong>といい、重みの大きい説明変数がわかれば、意図する結果を再現しやすくなります。機械学習の目的は、<strong>予測結果を導出する</strong>ことでもありますが、<strong>重みの大きい説明変数</strong>を発見することでもあります。</p>



<p>説明変数を定義することを<strong>変数選択</strong>や<strong>特徴選択</strong>といいますが、非常に難しい問題なので、ここでは深く触れず、ひとまず「性別・年齢・購買商品カテゴリ・購買頻度・購買金額」とします。なお、集計期間は2012年の一年間とします。</p>



<p>次に、BigQueryで機械学習用のテーブルを用意します。必要なのは会員IDごとの集計データで、そこに<strong>目的変数</strong>と<strong>説明変数</strong>を含めます。さらに、<strong>訓練データ（Training Data）</strong>で<strong>モデルを作成</strong>し、<strong>評価データ（Evaluation Data）</strong>で<strong>モデルを評価</strong>するというプロセスを踏まえるため、データをその二つに分割します。BigQueryのクエリエディタに以下のSQL文を入力し、青い［実行］ボタンをクリックしてみましょう。また、このクエリ結果をデータセット「DE」に「sum_members_ret」という名前で保存します。</p>



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



<p>なお、処理の効率化のために<strong>10%のサンプリング</strong>をしていますが［※1］、これは会員IDを10で割った剰余が0の場合に限定するという意味です。また、<strong>欠損</strong>を除外するために性別がNULLでない会員に限定し［※2］、年齢の<strong>異常値</strong>を除外するために10歳以上90歳未満の会員に限定しています［※3］。さらに、集計期間中の購買がない会員を除外しています［※4］。</p>



<p>SQL内の「retention」が、目的変数である「継続か否か」を指す変数で、最終購買日が2013年以降の会員の場合のみ継続を意味する「TRUE」を、それ以外は離反を意味する「FALSE」を設定します。また「evaluation」が、訓練データと評価データを切り分ける変数で、90%が訓練データ、10%が評価データになるようランダムに振り分けます。もともと10%のサンプリングを行なっているため、会員IDを100で割った剰余が0の場合を評価データとして「TRUE」を、それ以外は訓練データとして「FALSE」を設定します。</p>



<p>ちなみに、説明変数に<strong>購買頻度（Frequency</strong>）や<strong>購買金額（Monetary）</strong>は含めますが、<strong>最終購買日（Recency）</strong>は含めません。これは、目的変数である「継続か否か」自体が最終購買日を基準に定義されるためです。これを含めてしまうと、当然ながら予測精度は自動的に100%になります。</p>



<h2><strong>モデルを作成する。</strong></h2>



<p>データの準備が整ったので、機械学習を進めて行きます。まずは「継続か否か」の予測モデルの作成を行います。モデルの作成には、BigQuery MLで用意されている<strong>CREATE MODEL</strong>という関数を使用し、以下の構文で記述します。</p>



<pre class="wp-block-preformatted"><strong>CREATE OR REPLACE MODEL</strong> <em>データセット名</em>.<em>モデル名 </em>
<strong>OPTIONS</strong>( 
  model_type = <em>使用するモデリングタイプ</em>
) <strong>AS</strong> (
  <strong>SELECT</strong> <em>目的変数</em>, <em>説明変数</em>, ...
  <strong>FROM</strong> <em>機械学習用データテーブル</em>
  <strong>WHERE</strong> <em>訓練データを指定</em>
)</pre>



<p>［model_type］には<strong>ロジスティック回帰</strong>を示す［logistic_reg］を指定します。目的変数は列名を「label」で指定するルールのため「retention」をそれに置き換えます。説明変数には「性別・年齢・購買商品カテゴリ・購買頻度・購買金額」を指定するため、それ以外は除外します。</p>



<p>BigQueryのクエリエディタに以下のSQL文を入力し、青い［実行］ボタンをクリックしてみましょう。なおこのクエリ結果はデータセット「DE」に「mdl_members_ret」という名前で自動的に保存されます。</p>



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



<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>
	<item>
		<title>再考するデータマイニング</title>
		<link>https://uxmeetsdata.com/data-mining/</link>
				<pubDate>Fri, 01 Mar 2019 09:09:59 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Data Mining]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Machine Learning]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=2546</guid>
				<description><![CDATA[おむつとビール。 データマイニング（Data Mining）は、統計学や人工知能（Artificial Int...<p class="more-link"><a href="https://uxmeetsdata.com/data-mining/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<h2><strong>おむつとビール。</strong></h2>



<p><strong>データマイニング（Data Mining）</strong>は、統計学や人工知能（Artificial Intelligence：AI）などの手法を使って大量のデータから知識を取り出す技術のことで、文字通り知識を<strong>採掘（Mining）</strong>するイメージです。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="http://uxmeetsdata.com/wp-content/uploads/2019/03/xmd_mining-e1553916376199.jpg" alt="" class="wp-image-3484" width="480" height="245"/></figure></div>



<p>このデータマイニングという技術や言葉が普及するきっかけになったのが、有名な<strong>「おむつとビール」</strong>の話です。1992年に大手スーパーマーケットチェーンのOsco DrugsがPOSデータを分析したところ、<strong>おむつとビールが併売されることが多い</strong>ことがわかりました。このような併売傾向を分析する技術を、買い物かごにみたてて<strong>バスケット分析（Basket Analysis）</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>の、マーケティング領域における代表的な実用例となっています。</p>



<p>同じくマーケティング領域においては、1to1マーケティングとよばれる、数百万人の顧客をいくつかのセグメント（似た者同士）に細分化し、それぞれのセグメントに対して個別にマーケティング施策を行うことで、ビジネス成果を最大化するアプローチがありますが、このセグメントの分類手法として、教師なし機会学習の代表手法でもある<strong>クラスタリング（Clustering）</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/machine-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>がよく用いられます。</p>



<p>データマイニングの手法や技術の多くは、機械学習と一致します。ビッグデータ化にともなう機械学習の進化は、すなわち<strong>データマイニングの進化</strong>を意味します。一方で、<strong>データマイニングという言葉の盛り上がり</strong>は、かつて2000年代中頃にあったものより鎮静化しているように思います。それはなぜなのでしょうか。そして今後はどうなるのでしょうか。再考してみたいと思います。</p>



<h2><strong>データマイニングへの期待と失望。</strong></h2>



<p>データマイニングのもつ価値は、前述の「おむつとビール」の話に代表されるように、<strong>想像もしていなかった知識を発掘する</strong>ことにあります。まさか、おむつとビールがよく併売されるとは思わないからです。このことが、<strong>データマイニングの期待を高める</strong>ことになるわけですが、<strong>同時に期待を裏切る</strong>ことにもなります。</p>



<p>期待を裏切るポイントは大きく二つあります。ひとつは、想像もしない知識が発掘されたとして、<strong>実際の施策に展開しづらいことが多い</strong>こと。もうひとつは、結果として<strong>想像の範囲内の知識しか得られないことが多い</strong>ことです。</p>



<p>前者については、これも「おむつとビール」が典型例です。おむつとビールが併売されることがわかったとして、実際に同じ売り場に置くわけにはいきません。もっとも、おむつ売り場とビール売り場の動線上に、さらに併売傾向が見られる商品をうまく配置する、などの施策につながる可能性はあります。</p>



<p>やっかいなのは後者で、そもそもデータの中に想像もしない知識が埋もれているという保証はありませんし、あったとして、大量のデータからそれを拾い上げるのは非常に困難です。分析結果に何らかの知識が隠されていたとしても、<strong>結局それを解釈するのは人間</strong>であり、そこには深い経験と膨大な労力がかかります。魔法の杖のように自動的に知識がもたらされるという幻想をいだいていると、必ず期待を裏切られることになります。このことが、データマイニングという言葉の盛り上がりを鎮静化させた要因です。</p>



<h2><strong>重要なのはスパイラルモデル。</strong></h2>



<p>データ分析には大きく、<strong>検証的アプローチ</strong>と<strong>発見的アプローチ</strong>の二つのアプローチがあります。検証的アプローチとは、<strong>あらかじめ存在する仮説が正しいかを検証する</strong>ことで、例えば、あるコンテンツXの閲覧とある商品Yの購入に因果関係があるのではないか、という仮説を、実証実験などで検証するアプローチがこれです。この仮説検証を繰り返すことで分析精度が上がるわけですが、欠点が二つあります。ひとつは、もともとの<strong>仮説の精度が低いと、仮説検証に膨大なコストがかかる</strong>こと。もうひとつは、<strong>想像の範囲内の仮説しか立てられない</strong>ことです。</p>



<p>この検証的アプローチの欠点を補うのに、発見的アプローチが有効となります。発見的アプローチにより、<strong>比較的精度の高い仮説を抽出</strong>できたり、<strong>想像の範囲を超える仮説を発見</strong>できることがあります。つまり、この二つのアプローチは、どちらをとるべきか、ではなく補完関係にあり、行き来しながら<strong>スパイラルモデル</strong>を描くことで、効率的に分析精度を高めることができます。そして、この<strong>発見的アプローチに有効な手法こそがデータマイニング</strong>なのです。</p>



<p>ビッグデータ化により、<strong>大量であることはもちろん、多様なデータが収集可能</strong>となりました。その中で、一部の人間の経験や能力に頼った仮説設定は、本当に重要な要素を見逃す危険性を高めてしまうでしょう。そこで<strong>データマイニングは有益なヒントを与えてくれる</strong>可能性があります。かつてデータマイニングに幻想と失望をいだいたのであれば、その観点で見直してみるのはいかがでしょうか。</p>
]]></content:encoded>
										</item>
	<item>
		<title>再考するビッグデータ</title>
		<link>https://uxmeetsdata.com/big-data/</link>
				<pubDate>Wed, 27 Feb 2019 14:52:38 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Big Data]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Machine Learning]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=2409</guid>
				<description><![CDATA[ビッグデータにまつわる素朴な疑問。 ビッグデータ（Big Data）という言葉は2013年に流行して以来、広く...<p class="more-link"><a href="https://uxmeetsdata.com/big-data/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<h2><strong>ビッグデータにまつわる素朴な疑問。</strong></h2>



<p><strong>ビッグデータ（Big Data）</strong>という言葉は2013年に流行して以来、広く使われています。日々大量のデータが生産されており、5GとIoTの普及でさらに加速することが予想されます。また時を同じくして、<strong>人工知能（Artificial Intelligence：AI）</strong>や<strong>深層学習（Deep Learning）</strong>の技術が世間を賑わすようになりました。深層学習は大量の教師データを必要とする学習技術であり、ビッグデータの存在が実現に向かわせたと言っても過言ではありません。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="http://uxmeetsdata.com/wp-content/uploads/2019/03/xmd_bigdata-e1553913392647.jpg" alt="" class="wp-image-3482" width="480" height="237"/></figure></div>



<p>ところで、<strong>ビッグデータとは何</strong>でしょうか。文字通り大きなデータのことでしょうか。だとして、<strong>大きなデータとはどういうもの</strong>でしょうか。また、<strong>大きなことの意味は何</strong>でしょうか。逆に、<strong>スモールデータとは何</strong>でしょうか。それらの<strong>意味は時代とともに変化する</strong>のでしょうか。いろいろな素朴な疑問が湧いてきます。ブームから5年以上が経過し、5GとIoTによる変化の兆しが見え隠れする今、再考してみようと思います。</p>



<p>まずビッグデータの意味ですが、大量データであることはもちろんのこと、実はそれだけではありません。IT用語辞典には以下のようにあります。</p>



<blockquote class="wp-block-quote is-style-default"><p>ビッグデータとは、従来のデータベース管理システムなどでは記録や保管、解析が難しいような<strong>巨大なデータ群</strong>。明確な定義があるわけではなく、企業向け情報システムメーカーのマーケティング用語として多用されている。<br>多くの場合、ビッグデータとは単に量が多いだけでなく、<strong>様々な種類・形式が含まれる非構造化データ・非定型的データ</strong>であり、さらに、日々膨大に生成・記録される時系列性・リアルタイム性のあるようなものを指すことが多い。今までは管理しきれないため見過ごされてきたそのようなデータ群を記録・保管して即座に解析することで、ビジネスや社会に有用な知見を得たり、これまでにないような<strong>新たな仕組みやシステム</strong>を産み出す可能性が高まるとされている。</p><cite><a rel="noreferrer noopener" aria-label="IT用語辞典｜ビッグデータ
 (新しいタブで開く)" href="http://e-words.jp/w/ビッグデータ.html" target="_blank">IT用語辞典｜ビッグデータ</a><br></cite></blockquote>



<p>どうやら量以外にも、種類や形式がごった煮状態で整理整頓されていないという意味も含まれているようです。逆にいえば、世の中のデータの多くは種類や形式がバラバラで整理整頓されておらず、<strong>量を求めると必然的にごった煮状態になる</strong>ということです。</p>



<h2><strong>分散処理技術の進化による後押し。</strong></h2>



<p>整理されていなければ、データ分析は困難になります。ではデータ生成に関するルールを作ればよいのでは、ということになり、実際に標準化の動きもありますが、容易ではありません。そこで重要になるのが、<strong>データを分析可能な状態に整える作業や、それを自動化する技術</strong>です。それを<strong>データ準備（Data Preparation）</strong>といいますが、いま現在でも発展途上にある領域です。</p>



<p>深層学習は非常に注目され、かつ進化している学習技術ですが、大量の教師データを必要とするため、データ量がボトルネックになりがちです。そもそもどうやってデータを獲得するのかという問題があり、<strong>データ流通（Data Trading）</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-trading/">データ流通って？</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>などのソリューションが検討されていますが、よしんば集めたところで分析不可能なデータが大量にあってもどうしようもありません。データ準備は非常にやっかいな問題で、深層学習を代表とするビッグデータを活用したデータ分析や機械学習の発展を阻害する大きな要因のひとつになっています。</p>



<p>一方で、整理されていたとしても、大量のデータを高速に処理できなければ実用には向きません。ただ、これについてはコンピューターの性能向上と、<strong>Hadoopを代表とする分散処理技術の進化</strong>が実現を後押ししています。Hadoopは、大量のデータを複数のマシンで分散処理できるオープンソースのプラットフォームで、ペタバイト級の非構造化データ（テキストや画像など）の超高速処理を可能にしました。逆にいえば、Hadoopの登場がビッグデータ活用の推進に拍車をかけたといえます。</p>



<h2><strong>大きいことはいいことか？</strong></h2>



<p>ビッグデータの意味や、その活用が進んだ背景はわかりましたが、そもそも<strong>データが大量であることの意味</strong>はどこにあるのでしょうか。大きいことはいいことなのでしょうか。</p>



<p>ビッグデータがもたらした最大の価値は、<strong>深層学習を代表とする機械学習の進化</strong>でしょう。また、マーケティング領域では、1to1マーケティングとよばれる、数百万人の顧客をいくつかのセグメント（似た者同士）に細分化し、それぞれのセグメントに対して個別にマーケティング施策を行うことで、ビジネス成果を最大化するアプローチがありますが、それには<strong>大量データのノンサンプリングでの分析が必要となり、ビッグデータの分析技術や、ビッグデータそのものがもたらす意味は大きい</strong>と言えます。</p>



<p>一方で、ビッグデータは<strong>購入・転送・計算などのあらゆる面で膨大なコスト</strong>がかかります。また、大量であるがゆえに本当に重要なデータが埋もれてしまうリスクもあります。ビッグデータを活用した機械学習は、<strong>導出された予測モデルのメカニズムがブラックボックス化して説明しづらくなる</strong>という欠点があることは、「<a href="https://uxmeetsdata.com/ux-modeling/">UXモデリングって？</a>」でも触れたとおりです。</p>



<p>そこで、最近注目されているのが、<strong>スモールデータ（Small Data）</strong>です。「<a href="https://uxmeetsdata.com/sparse-modeling/">スパースモデリング って？</a>」でも取り上げたとおり、<strong>物事の本質的な特徴を決定づける要素はわずかである</strong>という性質があります。それをスパース性といいますが、その要素をうまく取り出すことができれば、必ずしも大量である必要はないわけです。そして、データが少量であれば、重要なデータが埋もれることもありません。また、コストも最小限に抑えることができます。</p>



<p>ただし、もとのデータに著しい偏りがあると、本質をとらえるのに重要な要素を獲得することはできません。つまり、大量であることよりも、<strong>多様であるという意味でのビッグデータは極めて重要</strong>であり、5GとIoTの普及により、今後はその期待がさらに高まるのではないかと考えられます。</p>
]]></content:encoded>
										</item>
	<item>
		<title>いまさら聞けないベイズ推定</title>
		<link>https://uxmeetsdata.com/bayesian-inference/</link>
				<pubDate>Sun, 10 Feb 2019 14:37:29 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Bayesian Inference]]></category>
		<category><![CDATA[Machine Learning]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=1507</guid>
				<description><![CDATA[ベイズってたまに聞くけど。 ベイズ推定という言葉は聞きなれないかもしれません。その意味では「いまさら聞けない」...<p class="more-link"><a href="https://uxmeetsdata.com/bayesian-inference/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<h2><strong>ベイズってたまに聞くけど。</strong></h2>



<p><strong>ベイズ推定</strong>という言葉は聞きなれないかもしれません。その意味では「いまさら聞けない」というタイトルはやや不適切ですが、技術や手法としては<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"><a href="https://uxmeetsdata.com/machine-learning/">いまさら聞けない機械学習</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>と同じように広く一般的に使われているものです。もっともベイズ推定は機械学習の手法として利用されるため並列ではありません。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/04/xmd_bayes.png" alt="" class="wp-image-6805" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/04/xmd_bayes.png 640w, https://uxmeetsdata.com/wp-content/uploads/2019/04/xmd_bayes-300x150.png 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>また、ベイズ推定は<strong>ベイズの定理</strong>を基にした推論技術ですが、<strong>ベイズ統計</strong>、<strong>ベイジアンフィルタ</strong>、<strong>ベイジアンネットワーク</strong>など、ベイズの定理を基にした技術や手法はたくさんあるので、なんらか耳にしたことはあるかと思います。これらをひっくるめて簡単に頭の整理をします。</p>



<p>ベイズの定理は、条件付き確率に関して成り立つ定理で、18世紀にイギリスの数学者トーマス・ベイズによって示されたものです。<strong>条件付き確率（Conditional Probability）</strong>とは、<strong>ある事象Xが起こるという条件のもとでの事象Yの確率P(Y|X)</strong>のことで、事象Xと事象Yの両方が起こる確率P(X∩Y)と合わせて、事象Xの確率P(X)が正の場合に以下の数式で表現されます。</p>







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



<p>ベイズの定理は、<strong>ある事象Yが起こった場合の事象Xの確率P(X|Y)</strong>を、条件の確率P(X)、結果の確率P(Y)、条件付き確率P(Y|X)から求めることができるというものです。この確率P(X|Y)を<strong>逆の条件付き確率</strong>といい、確率P(Y)が正の場合に以下の数式で表現できます。なお、条件付き確率の数式を変形したもので、意味はまったく同じです。</p>



<p>$$P(X\mid Y) = \frac{P(Y\mid X)P(X)}{P(Y)}\\$$</p>



<p>つまり、<strong>条件の確率P(X)</strong>、<strong>結果の確率P(Y)</strong>、<strong>条件付き確率P(Y|X)</strong>がわかれば、<strong>逆の条件付き確率P(X|Y)</strong>を推論できるということです。これで何がうれしいかというと、このような問題を解くことが可能となります。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/03/xmd_bayes-e1554069298975.gif" alt="" class="wp-image-3466" width="320" height="161"/><figcaption>トーマス・ベイズ<br>出典：Wikipedia</figcaption></figure></div>



<h2><strong>結果から原因の確率を推論する。</strong></h2>



<ul><li>今日のゲストが男性か女性かを当てる。</li><li>これまでのデータからゲストが男性である確率は60%である。</li><li>今日のゲストは身長が165cm以上である。</li><li>男性が165cm以上である割合は70%、女性が165cm以上である割合は20%である。</li></ul>



<p>身長が165cm以上という情報と、男性のほうが女性よりも165cm以上である割合が高いという情報から、ゲストが男性である確率はこれまでのデータの60%よりも高いと推測されますが、それをベイズの定理で計算してみましょう。</p>



<p>この場合、まず男性に着目すると、条件の確率P(X)は<strong>男性である確率の60%</strong>、結果の確率P(Y)は<strong>身長165cm以上である確率の100%</strong>、条件付き確率P(Y|X)は<strong>男性の場合に165cm以上である確率の70%</strong>となります。すると以下のように、逆の条件付き確率P(X|Y)として<strong>男性である確率は42%</strong>と計算されます。</p>



<p>$$男性：P(X\mid Y) = \frac{0.7\times 0.6}{1} = 0.42\\女性：P(X\mid Y) = \frac{0.2\times 0.4}{1} = 0.08\\$$</p>



<p>同様に女性に着目すると、<strong>女性である確率は8%</strong>と計算されるため、男性である確率：女性である確率＝0.42：0.08となり、<strong>男性である確率は84%である</strong>と推論されます。</p>



<p>このように、ベイズの定理を用いて逆の条件付き確率を求めることで、<strong>結果の事象Yが発生した場合に、原因の事象Xが発生している確率を推論する手法</strong>を<strong>ベイズ推定（Bayesian Inference）</strong>といいます。</p>



<p>なお、これまでに事象Xが発生した確率P(X)を<strong>事前確率</strong>、新たに事象Yが発生した場合の事象Xの確率である逆の条件付き確率P(X|Y)を<strong>事後確率</strong>、条件付き確率P(Y|X)を<strong>尤度（ゆうど）</strong>ともいいます。また、事後確率を新たな事前確率として扱うことを<strong>ベイズ更新（Bayesian Updating）</strong>といい、繰り返すことで推論精度が上がります。</p>



<h2><strong>未知や不確実性に強い。</strong></h2>



<p>ちなみに、さきほどから<strong>確率（Probability）</strong>という言葉を使っていますが、実は二種類の定義があります。<strong>頻度確率</strong>と<strong>ベイズ確率</strong>です。</p>



<p><strong>頻度確率（Frequency Probability）</strong>は、観測された頻度分布あるいは想定された母集団の割合から導かれる確率のことで、<strong>客観確率</strong>とも言います。また、頻度確率に基づく考え方を<strong>頻度主義（Frequentism）</strong>、頻度確率に基づく統計を<strong>頻度主義統計（Frequentist Statistics）</strong>といい、代表的な手法が<strong>最尤（さいゆう）推定</strong>です。頻度主義統計では母集団を固定するため、<strong>母数が定数でデータが変数</strong>となります。</p>



<p><strong>ベイズ確率（Bayesian Probability）</strong>は、ベイズの定理に基づき、事前確率を事後確率で更新（ベイズ更新）することで得られる確率のことで、事前確率を手元のデータから主観的に決めることから、<strong>主観確率</strong>とも言います。また、ベイズ確率に基づく考え方を<strong>ベイズ主義（Bayesianism）</strong>、ベイズ確率に基づく統計を<strong>ベイズ統計（Bayesian Statistics）</strong>といい、代表的な手法が<strong>ベイズ推定</strong>です。ベイズ統計では手元のデータを前提とするため、<strong>データが定数で母数が変数</strong>となります。</p>



<p>頻度主義統計は、充分なデータが得られる場合は客観的な確率を計算できるという特長があるものの、<strong>充分なデータが得られない場合には確率を計算できない、母数が更新された場合は最初から計算をしなおす必要があるという欠点</strong>があります。一方で、ベイズ統計は、事前確率が手元のデータに依存した主観的な確率であるという欠点があるものの、<strong>少ないデータでも確率を推論できる、母数が更新されることが前提かつそれにより推論精度が上がるという特長</strong>があるため、<strong>未知や不確実性に強く実用的</strong>であるといえます。</p>



<p>ベイズ推定の実用例でわかりやすいのは<strong>ベイジアンフィルタ（Bayesian Filter）</strong>です。対象データを分類するフィルタで、学習量が増えるとフィルタの分類精度が上がるという特長があり、スパムメールを判定するフィルタや、検索エンジンのランキングなどで活用されています。また、<strong>ベイジアンネットワーク（Bayesian Network）</strong>は、複雑な因果関係をグラフ構造で表現し、変数間の関係を条件つき確率で表す確率推論モデルで、これもさまざまな領域で応用されています。</p>



<p>ただ、ベイズ推定がいま最も注目されている領域は機械学習でしょう。「<a href="https://uxmeetsdata.com/ux-modeling/">UXモデリングって？</a>」でも触れたように、ビッグデータによる機械学習には、<strong>大量の学習データが必要である</strong>、<strong>導出された予測モデルのメカニズムがブラックボックス化して説明しづらくなる</strong>という欠点があります。その克服には<strong>正則化</strong>が必要ですが、ベイズ推定による<strong>ベイズ最適化（Bayesian Optimization）</strong>が有効な手法となるため、<strong>多層ニューラルネットワーク</strong>の重みの調整にベイズ最適化を利用する研究がなされています。また、ベイズ最適化と相性のいい<strong>カーネル法</strong>を活用した<strong>サポートベクターマシン（Support Vector Machine：SVM）</strong>が見直されています。</p>



<p>また<strong>スパースモデリング（Sparse Modeling）</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/sparse-modeling/">スパースモデリングって？</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>最後に、ベイス推定を学ぶ参考書として、大関真之氏の著書「<a href="https://www.amazon.co.jp/dp/4274221393" target="_blank" rel="noreferrer noopener" aria-label=" (新しいタブで開く)">ベイズ推定入門 モデル選択からベイズ的最適化まで</a>」をおすすめしておきます。ベイス推定の概念や理論が、数式なしでわかりやすく解説されています。</p>
]]></content:encoded>
										</item>
	<item>
		<title>いまさら聞けない機械学習</title>
		<link>https://uxmeetsdata.com/machine-learning/</link>
				<pubDate>Sat, 09 Feb 2019 07:36:29 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[Sparse Modeling]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=1391</guid>
				<description><![CDATA[機械学習≠人工知能。 最近はやや落ち着いた感がありますが、人工知能（Artificial Intelligen...<p class="more-link"><a href="https://uxmeetsdata.com/machine-learning/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<h2><strong>機械学習≠人工知能。</strong></h2>



<p>最近はやや落ち着いた感がありますが、<strong>人工知能（Artificial Intelligence：AI）</strong>あるいは<strong>機械学習（Machine Learning）</strong>という言葉を聞かない日はないくらいにバズワード化しています。これは第三次AIブームと呼ばれ、その火付け役が機械学習の一種である<strong>深層学習（Deep Learning）</strong>であることはいうまでもありません。</p>



<p>一方で、機械学習はAIの一分野にすぎないにも関わらず、<strong>あたかもイコールであるかのような空気感</strong>や、あるいは機械学習の手法はたくさんあるにも関わらず、深層学習に代表される<strong>ニューラルネットワーク</strong>と<strong>ビッグデータ（Big Data）</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/big-data/">再考するビッグデータ</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>AIとはなんぞや</strong>については長くなるので控えるとして、ここでは<strong>機械学習とはなんぞや</strong>について簡単におさらいしておきます。</p>



<h2><strong>教師あり、教師なし、強化学習。</strong></h2>



<p>機械学習は、人間がもつ<strong>学習能力</strong>をコンピューターで実現する技術や手法のことです。人間のあらゆる能力を対象とするのがAIであるとするならば、機械学習はその一部にすぎないということになります。</p>



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



<p>機械学習は、教師あり学習と教師なし学習に大きく分類されます。</p>



<p><strong>教師あり学習（Supervised Learning）</strong>とは、<strong>問題と正解の両方を教えて、新しい問題の正解を予測できるようにする学習</strong>のことです。例えば、現在までの天気のデータから明日の天気を予測させる問題がこれにあたります。この場合の正解とは「晴、曇、雨」などで、それを決定づける要因である気温・湿度・気圧などのデータと合わせてコンピューターに学習させることで、現在までの状況から明日に起こる天気を予測できるようにします。なお、問題と正解の組み合わせを<strong>教師データ</strong>といいます。また、正解を決定づける要因のことを<strong>特徴量（Feature Quantity）</strong>といいます。</p>



<p><strong>教師なし学習（Unsupervised Learning）</strong>とは、<strong>問題だけを与えて特徴を認識させる学習</strong>のことです。例えば、購買データをもとにユーザーを似た者同士でグループ分けするような問題がこれにあたります。2012年に米Googleがネコを認識できるAIを開発したことが大きな話題となりましたが、これも教師なし学習です。YouTubeから取り出された1000万枚の画像を読み取るうちに、自律的に”ネコ”というグループを認識するようになりました。ただし、そのAIはそれが”ネコ”という名前の動物であることは知りません。なお、似た者同士のグループを<strong>クラスター</strong>、その分類手法を<strong>クラスタリング</strong>といいます。これは<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>特徴量</strong>といいます。</p>



<p><strong>強化学習（Reinforcement Learning）</strong>を、三つ目として分類に加えることがあります。教師あり学習と似ていますが、正解ではなく「<strong>報酬</strong>」を与えることで、もっとも多くの報酬を獲得できる「<strong>行動の選択肢</strong>」を学習させる手法です。報酬を正解と捉えれば教師あり学習と同じですが、決定的に異なるのは、各行動ではなく<strong>連続した一連の行動</strong>に対して報酬が与えられることです。サッカーでたとえると、ゴールに至るまでのドリブルやパスなどの<strong>一連のプレー選択</strong>に対して報酬を与えるのが強化学習で、<strong>それぞれのプレー選択</strong>に良し悪しの評価を与えるのが教師あり学習といえます。2016年にGoogleのAlphaGoというAIが囲碁プロ棋士を破ったことが大きな話題となりましたが、これは強化学習です。</p>



<h2><strong>盛り上がるニューラルネットワーク。</strong></h2>



<p>機械学習の手法はたくさんありますが、代表的なところで、サポートベクターマシン、クラスタリング、ニューラルネットワークなどがあります。</p>



<p><strong>サポートベクターマシン（Support Vector Machine：SVM）</strong>は、入力データから正解を識別する教師あり学習の代表的な手法です。詳しい説明は別の機会にしますが、機械学習の永遠の課題である<strong>過学習</strong>を回避し、<strong>汎化性能</strong>をあげやすいという特長があります。過学習とは、目の前にある問題に最適化しすぎることで、新しく発生する問題に対応できないことを言います。受験でたとえると、過去問を完璧に解くことにこだわるあまりに、応用力がつかず、テスト本番で出題された傾向の違う問題に対応できない、というような状態です。その克服に使われる方法のひとつに<strong>正則化</strong>があります。正則化は、変数に制約を課すことで問題を抽象化してシンプルにすることを意味し、<strong>スパースモデリング（Sparse Modeling）</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/sparse-modeling/">スパースモデリングって？</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>スパース条件</strong>、あるいは<strong>ベイズ推定（Bayesian Inference）</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/bayesian-inference/">いまさら聞けないベイズ推定</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>の<strong>事前確率</strong>がそれにあたります。SVMでは<strong>マージン最適化</strong>という正則化手法で過学習を回避するよう工夫されています。</p>



<p><strong>クラスタリング（Clustering）</strong>は、入力データを似た者同士で分類する教師なし学習の代表的な手法です。こちらも詳しい説明は別の機会にしますが、多次元空間上のユークリッド距離が近いものを同じクラスター（似た者同士）としてグループ化するのが基本的な考え方で、<strong>階層型</strong>と<strong>非階層型</strong>に大きくわけられます。階層型は、距離が近いものから順にグループ化し、階層構造にすることでクラスターを整理します。いくつのクラスターに分類するかを事前に決める必要がないという特長がありますが、大量データの場合に計算量が多くなったり、結果が不明瞭になる欠点があります。対して、K平均法に代表される非階層型は、事前にクラスター数を決め、その数にサンプルを分割するため、大量データの学習に適しています。ただし、最適なクラスター数を自動的には計算する方法は確立されておらず、分析者のスキルに依存するという欠点があります。</p>



<p><strong>ニューラルネットワーク（Neural Network）</strong>は、教師あり学習・教師なし学習のどちらにも利用される手法で、とりわけ<strong>多層ニューラルネットワーク（Deep Neural Network：DNN）</strong>を用いた機械学習のことを深層学習といいます。脳の内部では<strong>神経細胞（Neuron）</strong>がシナプスの結合によりネットワーク構造となっており、そこに電気が流れて情報を処理するコンピューターのようになっていることが知られています。その情報処理機構を数理モデルにしたものがDNNであり、すなわち脳を模することで学習機能を実現しようとするアプローチといえます。DNNを用いた機械学習の発想は古くからあったものの、大量データと膨大な計算を行う超高性能なコンピューターを必要とするために実現に至りませんでした。それらが克服されたことと、長年の研究によるアルゴリズムの進化が融合し、深層学習として具現化され、まさにいま盛り上がりを見せています。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="http://uxmeetsdata.com/wp-content/uploads/2019/03/xmd_nn-e1553911043603.jpg" alt="" class="wp-image-3464" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/03/xmd_nn-e1553911043603.jpg 530w, https://uxmeetsdata.com/wp-content/uploads/2019/03/xmd_nn-e1553911043603-300x150.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>とはいえ、大量データと超高性能なコンピューターを利用するには<strong>膨大なコスト</strong>がかかります。また、データも大量にあれば何でもよいというわけではなく、<strong>学習に適した変数</strong>がないと意味がありません。さらに「<a href="https://uxmeetsdata.com/ux-modeling/">UXモデリングって？</a>」でも触れたように、ビッグデータによる機械学習には、<strong>導出された予測モデルのメカニズムがブラックボックス化して説明しづらくなる</strong>という欠点があります。</p>



<p>それらを克服するためには、<strong>学習に適したデータを低コストで獲得するための仕組み</strong>と、<strong>学習に必要な変数とデータ量に絞り込んでシンプルな数理モデルを作る技術</strong>が必要です。前者は<strong>データ流通（Data Trading）</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/data-trading/">データ流通って？</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>という分野で普及に向けた取り組みが行われており、後者は<strong>スパースモデリング</strong>のような技術の研究開発が進んでいます。</p>



<p>最後に、機械学習を学ぶ参考書として、大関真之氏の著書「<a rel="noreferrer noopener" aria-label="機械学習入門 ボルツマン機械学習から深層学習まで (新しいタブで開く)" href="https://www.amazon.co.jp/dp/4274219984" target="_blank">機械学習入門 ボルツマン機械学習から深層学習まで</a>」をおすすめしておきます。機械学習の概念や理論が、数式なしでわかりやすく解説されています。</p>
]]></content:encoded>
										</item>
	<item>
		<title>Python vs. R どっち？</title>
		<link>https://uxmeetsdata.com/python-vs-r/</link>
				<pubDate>Sat, 02 Feb 2019 05:48:51 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=884</guid>
				<description><![CDATA[データサイエンスは時間が命。 データサイエンスや統計のためのツールはたくさんありますが、その中でもPython...<p class="more-link"><a href="https://uxmeetsdata.com/python-vs-r/" 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/04/xmd_python_r.png" alt="" class="wp-image-6453" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/04/xmd_python_r.png 640w, https://uxmeetsdata.com/wp-content/uploads/2019/04/xmd_python_r-300x150.png 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<h2><strong>データサイエンスは時間が命。</strong></h2>



<p>データサイエンスや統計のためのツールはたくさんありますが、その中でも<strong>Python</strong>と<strong>R</strong>はその人気を二分していると言えるでしょう。これからデータサイエンスを始める方にとっては、どちらを選択すべきか悩ましいところです。</p>



<p>筆者はRから始めてPythonに移行した派です。理由は後述しますが、優劣ではなく、Pythonのほうが用途に適していたからです。それぞれの特徴を理解した上で、<strong>用途に合っている方を選択すればよい</strong>と思います。もしくは<strong>用途に合わせて使い分ける</strong>ことをおすすめします。</p>



<p>PythonもRも汎用的なプログラミング言語なので、自分でプログラムさえ書けば何でもできます。そう言ってしまえば、C/C++でもJavaでも何でもいいじゃないか、という話になりますが、実際そのとおりです。後述しますが、実行速度でいえばPythonよりもC/C++のほうが圧倒的に速いですし、NumPyやTensorFlowのようなC/C++で作られたPython用拡張モジュールも多数あります。</p>



<p>ツールを選択する上で重要な判断基準となるのは、何ができるかではなく、どれだけ効率的かという点です。<strong>データサイエンスは時間が命</strong>です。限りある時間を、数理モデルやアルゴリズムを考えたり、試行錯誤に使うためには、プログラミングや処理実行にかかる時間は可能なかぎり短縮すべきです。</p>



<p>データサイエンスや統計でPythonとRが選ばれているのは、どちらもこの領域における効率性が高いからです。ただ、そのポイントが異なるため、どちらを選択すべきかという話になります。</p>



<h2><strong>ビッグデータのPython、統計のR。</strong></h2>



<p>PythonとRの特徴を、効率性の観点から、いくつかの軸で比較します。</p>



<table style="table-layout: fixed; width: 100%;">
<tr style="color: #fff; background-color: #000;">
<td>&nbsp;</td>
<td>Python</td>
<td>R</td>
</tr>
<tr>
<td style="background-color: #eee;">プログラム実行速度</td>
<td>遅い</td>
<td>非常に遅い</td>
</tr>
<tr>
<td style="background-color: #eee;">プログラム汎用性</td>
<td>高い</td>
<td>やや低い</td>
</tr>
<tr>
<td style="background-color: #eee;">プログラム可読性</td>
<td>高い</td>
<td>やや低い</td>
</tr>
<tr>
<td style="background-color: #eee;">ライブラリ・統計解析</td>
<td>豊富</td>
<td>非常に豊富</td>
</tr>
<tr style="height: 32px;">
<td style="background-color: #eee;">ライブラリ・機械学習</td>
<td>非常に豊富</td>
<td>豊富</td>
</tr>
<tr>
<td style="background-color: #eee;">リファレンス・統計解析</td>
<td>豊富</td>
<td>非常に豊富</td>
</tr>
<tr>
<td style="background-color: #eee;">リファレンス・機械学習</td>
<td>非常に豊富</td>
<td>豊富</td>
</tr>
<tr>
<td style="background-color: #eee;">クラウド実行環境</td>
<td>あり</td>
<td>なし</td>
</tr>
</table>



<p>Pythonの特徴をRとの比較で整理します。</p>



<ul><li><strong>実行速度は相対的に速い</strong>。</li><li>プログラミング言語としての完成度が高く、<strong>汎用性と可読性に優れる</strong></li><li>統計解析系のライブラリやリファレンスの豊富さはやや劣る</li><li><strong>機械学習系のライブラリやリファレンスが非常に充実している</strong>（scikit-learn、TensorFlow、PyTorchなど）</li><li><strong>クラウドでの実行環境が存在する</strong>（Google Cloud Datalab、Google Colabなど）</li></ul>



<p>この特徴の違いから、<strong>Pythonはビッグデータ解析や機械学習に</strong>、<strong>Rは統計解析に</strong>向いていることがわかります。とりわけビッグデータ解析では、<strong>クラウド実行環境の存在が重要</strong>で、筆者がPythonに移行した最大の理由はそれです。</p>



<p>ビッグデータ解析では、当然のことながら大量のデータを処理する必要があります。とくに<strong>ノンサンプリングでの分析が必要な場合、サンプリングによってデータ量を減らすことができない</strong>ため、大量データと向き合わざるを得ません。</p>



<p>まず何よりも、実行速度が求められます。PythonはRより相対的に速いとはいえ遅いことにはかわりませんし、どの言語を使おうが最終的にはコンピュータの処理速度に依存します。<strong>クラウドではCPUやGPUのスケールを自由にコントロールすることが可能</strong>です。</p>



<p>次に、データ連携の問題があります。データベース（Database：DB）との連携が必要で、とくに<strong>DBがクラウド上にある場合は、プログラム実行環境も同じクラウド上にあれば、シームレスな連携が可能</strong>になります。たとえば、DBがGoogle BigQueryであれば、Google Cloud DatalabというクラウドのPython実行環境からBigQueryに直接クエリを実行できます。これにより、<strong>データ準備（Data Preparation）</strong>をBigQueryでSQLにより行い、<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>機械学習（Machine 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/machine-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>をCloud DatalabでPythonにより行うといった役割分担が容易になります。</p>



<p>ちなみに、ベースとなっているJupyter NotebookはRに対応していますが、Google Cloud Datalabは、いまのところRには対応しておらず、Pythonのみの対応となっています。</p>



<h2><strong>PythonとRだけではない？</strong></h2>



<p>PythonとRで迷うようであれば、Pythonをおすすめします。前述の理由もそうですが、基本的にはRにできてPythonにできないことはほとんどありません。統計解析のライブラリやリファレンスについても、現在はRのほうが充実していますが、Pythonもかなり追いついて来ています。</p>



<p>さらにいうと、選択肢はPythonとRだけではありません。NumPyやTensorFlowのようなC/C++で作られたPython用拡張ライブラリがあることはお伝えしましたが、高速化の要求レベルによってはC/C++を使う必要があります。</p>



<p>C/C++とPythonの実行速度の違いの要因はいくつかありますが、その一つが変数宣言の違いです。<strong>C/C++は静的型付き言語で、変数宣言時に型の定義が必要</strong>ですが、<strong>Pythonは動的型付き言語で、型は自動的に決定</strong>されます。自動車でいうMTとATの違いのようなもので、動的型付き言語は自動であるがゆえに、プログラミングの作業負荷が軽減される反面、最適化の自由度が失われます。なお、PythonにC/C++の型を導入することで高速化した<strong>Cython</strong>という言語もあります。</p>



<p>また、<strong>Pythonの扱いやすさと、C/C++にせまる実行速度を兼ね備えた言語</strong>として、<strong>Julia</strong>が注目されています。発展途上であるため、ライブラリの充実度でPythonに劣りますが、外部ライブラリ連携でカバーできます。また、並列処理や分散コンピューティングが想定された設計で、実装しやすいという特長があります。</p>



<p>ちなみに、ブラウザUIの対話型プログラム実行環境であるJupyter Notebookは、かつてのiPython Notebookが改称されたものですが、その由来は「<strong>Ju</strong>lia + <strong>Pyt</strong>hon + <strong>R</strong>」で、PythonのみからJuliaとRにも拡張されたことを意味しています。</p>



<p>ビッグデータ解析領域でJuliaの普及が進めば、現在はPythonのみの対応であるGoogle Cloud Datalabも、Juliaに対応する可能性はあります。いまからデータサイエンスを始める方は、Juliaを選ぶのもひとつかもしれませんね。</p>
]]></content:encoded>
										</item>
	</channel>
</rss>
