<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>統計・分析 on Marketechlabo</title><link>https://www.marketechlabo.com/categories/statistics-analysis/</link><description>Recent content in 統計・分析 on Marketechlabo</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Thu, 05 Mar 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://www.marketechlabo.com/categories/statistics-analysis/index.xml" rel="self" type="application/rss+xml"/><item><title>BIツール</title><link>https://www.marketechlabo.com/statistics-analysis/bi-tools/</link><pubDate>Thu, 05 Mar 2026 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/statistics-analysis/bi-tools/</guid><description>
&lt;h1 id="biツールの基本構造"&gt;BIツールの基本構造&lt;/h1&gt;
&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;
&lt;p&gt;昨今のダッシュボードブーム・BIブームの中で、さまざまなダッシュボードが作られている。項目やフィルタを選択して深掘りできる分析寄りのダッシュボードもあれば、エグゼクティブが数字をさっと確認するだけのシンプルなダッシュボードもある。それらをすべて「ダッシュボード」と呼ぶかどうかの議論はさておき、ダッシュボードを構築するツール（BIツール）もまた数多く存在している。&lt;/p&gt;
&lt;p&gt;ただし、BIツールは数あれど基本的な構成はどれも同じである。この基本構造を押さえておけば、新しいBIツールを扱うことになっても学習にスムーズに入っていける。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ダッシュボード
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── ウィジェット
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── ディメンション × 指標
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ ├── ディメンション（地域 / カテゴリ / 年月 …）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ └── 指標（売上 / 件数 / 単価 …）＋ 集計方法（合計 / 平均 / 最大 / カウント …）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── チャートタイプ（棒グラフ / 折れ線 / 円グラフ / テーブル / 数値カード / 地図 …）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── 変数（関数で作成）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ ├── グルーピング → ディメンションとして使う
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ ├── 計算（四則演算 / 比率 …）→ 指標として使う ＋ 集計方法
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ └── 文字列処理 → ディメンションとして使う
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── ウィジェット単位のフィルタ
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── グローバルフィルタ / パラメータ
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── グローバルフィルタ（ダッシュボード全体の絞り込み）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── パラメータ（表示内容・計算ロジックの切り替え）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── データソース（スプレッドシート / データベース / SaaS連携 …）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="1-ダッシュボードとウィジェット"&gt;1. ダッシュボードとウィジェット&lt;/h2&gt;
&lt;p&gt;BIツールの画面構成は、大きく「ダッシュボード」と「ウィジェット」の2層で成り立っている。&lt;/p&gt;</description></item><item><title>機械学習や分析時のカテゴリ変数の高度なあれこれ</title><link>https://www.marketechlabo.com/statistics-analysis/tips-categorical-variables/</link><pubDate>Thu, 12 Feb 2026 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/statistics-analysis/tips-categorical-variables/</guid><description>
&lt;p&gt;データの前処理において重要となるカテゴリ変数の扱い。高度なTipsを紹介する。&lt;/p&gt;
&lt;h2 id="水準数を減らす"&gt;水準数を減らす&lt;/h2&gt;
&lt;p&gt;機械学習タスクの場合、水準数を削減することも重要。特に&lt;strong&gt;ダミーコーディング（One-Hot Coding）では水準数がほぼカラム数になり&lt;/strong&gt;、計算負荷の原因になるケースがある。
たとえば出現頻度がレアな水準はまとめて「その他」にするなどの方法があるが、&lt;strong&gt;目的変数に対する影響の大きい重要な水準は削除してはならない&lt;/strong&gt;。精度を落とさぬよう、効率的に水準数を減らすことが重要になる。
水準の選び方としては、&lt;strong&gt;目的変数に対する情報量&lt;/strong&gt;に着目するといい。関心対象のカテゴリ変数だけをダミーコーディングで説明変数にした&lt;strong&gt;ツリー系のモデルを作り、重要度上位N個の変数（水準）を採用&lt;/strong&gt;する。下位の水準はまとめる。
同様の考え方で全水準のジニ係数を計算し、上位N個の水準を採用する方法もある。つまりCARTの考え方である。これならモデル構築が不要で計算が簡単である。
データはdata.table&lt;code&gt;train.dt&lt;/code&gt;で目的変数が&lt;code&gt;y&lt;/code&gt;、関心対象のカテゴリ変数を&lt;code&gt;x1&lt;/code&gt;とすると、&lt;code&gt;x1&lt;/code&gt;の各水準のジニ係数は&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;&lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;sum&lt;/span&gt;(train.dt[, .(importance&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;abs&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;sum&lt;/span&gt;(y) &lt;span style="color:#f92672"&gt;-&lt;/span&gt; .N&lt;span style="color:#f92672"&gt;*&lt;/span&gt;train.dt[, (&lt;span style="color:#a6e22e"&gt;sum&lt;/span&gt;(y)&lt;span style="color:#f92672"&gt;/&lt;/span&gt;.N)])), by&lt;span style="color:#f92672"&gt;=&lt;/span&gt;x1][,importance])&lt;span style="color:#f92672"&gt;/&lt;/span&gt;train.dt[,.N]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;つまり上位100水準は&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;remain_x1 &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; train.dt[, .(importance&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;abs&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;sum&lt;/span&gt;(y) &lt;span style="color:#f92672"&gt;-&lt;/span&gt; .N&lt;span style="color:#f92672"&gt;*&lt;/span&gt;train.dt[, (&lt;span style="color:#a6e22e"&gt;sum&lt;/span&gt;(y)&lt;span style="color:#f92672"&gt;/&lt;/span&gt;.N)])), by&lt;span style="color:#f92672"&gt;=&lt;/span&gt;x1]&lt;span style="color:#a6e22e"&gt;[order&lt;/span&gt;(&lt;span style="color:#f92672"&gt;-&lt;/span&gt;importance), &lt;span style="color:#a6e22e"&gt;as.character&lt;/span&gt;(x1)][1&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重要でない水準は(other)にまとめる。不要になった水準を削除するのを忘れずに。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;train.dt[&lt;span style="color:#f92672"&gt;!&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;is.na&lt;/span&gt;(x1) &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color:#f92672"&gt;!&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;as.character&lt;/span&gt;(x1) &lt;span style="color:#f92672"&gt;%in%&lt;/span&gt; remain_x1, x1 &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;(other)&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;train.dt[,x1&lt;span style="color:#f92672"&gt;:=&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;droplevels&lt;/span&gt;(x1)]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="バイナリコーディングは便利"&gt;バイナリコーディングは便利&lt;/h2&gt;
&lt;p&gt;ダミーコーディング（One-Hot Coding）は前述のとおり列の数が多くなるが、&lt;strong&gt;情報量はそのままに列の数を減らせる&lt;/strong&gt;のがバイナリコーディングである。バイナリコーディングでは$2^{列数}$個の水準を表現できる。機械学習、特にツリー系のアルゴリズムの場合には有効。
ただし使う場合は&lt;strong&gt;ツリーの深さを深めに設定&lt;/strong&gt;しておかないと一つのツリーでカテゴリ変数を説明しきれなくなる。また変数間の従属が強烈になるので、ロジスティック回帰などの説明変数間の独立を想定したモデルだと不向き。
以下の関数&lt;code&gt;bin_encode()&lt;/code&gt;は1列のfactor型変数を複数列の0/1整数にする。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;vec&lt;/code&gt;は対象のカテゴリ変数の列（ベクトル）&lt;/li&gt;
&lt;li&gt;戻り値がバイナリコーディング済み（0/1の整数）の行列。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;label&lt;/code&gt;はバイナリコーディングされた変数の列名のにつけるプレフィクス。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;bin_encode &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt;(vec, label){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mat &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;matrix&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;as.integer&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;intToBits&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;as.integer&lt;/span&gt;(vec))),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ncol &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;32&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; nrow &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;length&lt;/span&gt;(vec),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; byrow &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;TRUE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; )[, &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;ceiling&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;length&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;unique&lt;/span&gt;(vec)) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;))]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;is.matrix&lt;/span&gt;(mat)) mat &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;as.matrix&lt;/span&gt;(mat)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;colnames&lt;/span&gt;(mat) &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;paste0&lt;/span&gt;(label, &lt;span style="color:#a6e22e"&gt;seq&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;ncol&lt;/span&gt;(mat)))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt;(mat)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="2列のカテゴリ変数がほぼ一致するかどうかを判定"&gt;2列のカテゴリ変数がほぼ一致するかどうかを判定&lt;/h2&gt;
&lt;p&gt;説明変数の中でほぼ一致するカテゴリ変数が存在することがある。たとえば行動履歴データで、初回訪問地域とコンバージョン時の地域などである。このようなケースでは&lt;strong&gt;一方のカテゴリ変数を説明変数から除外する&lt;/strong&gt;のが望ましい。除外するための基準として&lt;strong&gt;数値型変数であれば一般的な相関係数などの距離・類似度の指標&lt;/strong&gt;を使えるが、カテゴリ変数の場合は使えない。
0/1変数の場合はJaccard係数などを使うことができるので、カテゴリ変数をダミーコーディングした変数つまり&lt;strong&gt;ダミー変数のJaccard係数&lt;/strong&gt;を計算し、それが1に近いもの（ほぼ位置する水準）が全水準の中でどれだけ存在するかに着目する。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Jaccard係数を計算&lt;/li&gt;
&lt;li&gt;それが閾値を超える水準の数をカウント&lt;/li&gt;
&lt;li&gt;それが全水準に対してどの程度の比率かを見る&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Jaccard係数を計算する関数。水準数が多い場合を想定してsparse matrix(dgCMatrix)を使う。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;require&lt;/span&gt;(Matrix)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;jcdSparse &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt;(X){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; X &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;as&lt;/span&gt;(X, &lt;span style="color:#e6db74"&gt;&amp;#34;dgCMatrix&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; X&lt;span style="color:#f92672"&gt;@&lt;/span&gt;x &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;rep&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;length&lt;/span&gt;(X&lt;span style="color:#f92672"&gt;@&lt;/span&gt;x)) &lt;span style="color:#75715e"&gt;# 非ゼロ要素はすべて1に置換&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; vec_sum_col &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;colSums&lt;/span&gt;(X)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; AB &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;crossprod&lt;/span&gt;(X)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sim &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; AB &lt;span style="color:#f92672"&gt;/&lt;/span&gt; (vec_sum_col &lt;span style="color:#f92672"&gt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;t&lt;/span&gt;(AB &lt;span style="color:#f92672"&gt;-&lt;/span&gt; vec_sum_col)) &lt;span style="color:#75715e"&gt;# まとめて&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sim &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;as&lt;/span&gt;(sim, &lt;span style="color:#e6db74"&gt;&amp;#34;dgCMatrix&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt;(sim)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Jaccard係数が閾値以上の水準数の全水準数に対する比率を計算する関数。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;factors_almost_equal &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt;(data, x, y, threshold&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0.95&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; x &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;deparse&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;substitute&lt;/span&gt;(x))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; y &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;deparse&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;substitute&lt;/span&gt;(y))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;is.factor&lt;/span&gt;(data[[x]]) &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;FALSE&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#stop(paste(x, &amp;#39;is not a factor!&amp;#39;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; data[[x]] &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;as.factor&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;as.character&lt;/span&gt;(data[[x]]))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;is.factor&lt;/span&gt;(data[[y]]) &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;FALSE&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#stop(paste(y, &amp;#39;is not a factor!&amp;#39;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; data[[y]] &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;as.factor&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;as.character&lt;/span&gt;(data[[y]]))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; x_mat &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fac2sparse&lt;/span&gt;(data[[x]], drop&lt;span style="color:#f92672"&gt;=&lt;/span&gt;F)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; y_mat &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fac2sparse&lt;/span&gt;(data[[y]], drop&lt;span style="color:#f92672"&gt;=&lt;/span&gt;F)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sim &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;jcdSparse&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;t&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;rbind&lt;/span&gt;(x_mat, y_mat)))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sim &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;tril&lt;/span&gt;(sim, &lt;span style="color:#ae81ff"&gt;-1&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;triu&lt;/span&gt;(sim, &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ratio_gt_threshold &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;sum&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;apply&lt;/span&gt;(sim, &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;, max) &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; threshold) &lt;span style="color:#f92672"&gt;/&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;nrow&lt;/span&gt;(sim)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#print(paste(&amp;#39;Similarity between&amp;#39;, x, &amp;#39;and&amp;#39;, y, &amp;#39;:&amp;#39;, ratio_gt_threshold))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt;(ratio_gt_threshold)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この戻り値が1に近いほどカテゴリ変数全体としての類似度が高いということになる。&lt;/p&gt;</description></item><item><title>実際の事象におけるデータの分布と確率分布、一部のデータから全体を推測する考え方</title><link>https://www.marketechlabo.com/statistics-analysis/probability-inferential-statistics/</link><pubDate>Sun, 22 Jan 2017 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/statistics-analysis/probability-inferential-statistics/</guid><description>
&lt;h2 id="確率分布"&gt;確率分布&lt;/h2&gt;
&lt;p&gt;これまで「分布」という言葉が何度も出てきたが、この「分布」とは確率分布のことを指している。ここでは具体的なさまざまな確率分布を紹介する。
まず確率分布の定義であるが、確率分布とは、確率変数の各々の値に対する、その生起しやすさをプロットしたものである。そして確率変数とは、確率的に取る値が変わる変数を指す。
発生する事象が確率的に変化するものを想像しよう。その生起しやすさを表すのが確率分布である。
厳密な議論は省略してどのような事象があてはまるか、分布に対するイメージがわかることを目的とする。&lt;/p&gt;
&lt;h3 id="離散型確率分布"&gt;離散型確率分布&lt;/h3&gt;
&lt;h4 id="ベルヌーイ分布"&gt;ベルヌーイ分布&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1回の試行で表が出るか裏が出るか&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;一か八か&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;成功確率 $p$ の事象が1回の試行で成功するかどうか&lt;/li&gt;
&lt;li&gt;期待値＝$p$、分散＝$p(1-p)$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;期待値は確率分布の中心的位置を表す。
分散は平均からのバラつきの程度を数量的に表す。&lt;/p&gt;
&lt;h4 id="二項分布"&gt;二項分布&lt;/h4&gt;
&lt;p&gt;（例）平均して打率3割の選手が年間500打席でヒットを打つ回数の分布
&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="二項分布"
class="image_figure image_internal image_unprocessed"
src="/images/analytics/dbinom.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;$n$ 回やって何回成功するか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;成功確率 $p$ の事象が $n$ 回の試行で成功する回数&lt;/li&gt;
&lt;li&gt;この分布を$Bin(n, p)$と表記&lt;/li&gt;
&lt;li&gt;期待値＝$np$、分散＝$np(1-p)$&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="ポアソン分布"&gt;ポアソン分布&lt;/h4&gt;
&lt;p&gt;（例）あるサッカーリーグの1試合における得点の分布
&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="ポアソン分布"
class="image_figure image_internal image_unprocessed"
src="/images/analytics/dpois.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;レアな事象が発生する回数&lt;/strong&gt;（カウントデータ）&lt;br&gt;
（例）クリック数、1日に受け取るメールの件数&lt;/li&gt;
&lt;li&gt;二項分布との関係
&lt;ul&gt;
&lt;li&gt;二項分布で $n$ →大、$p$ →小、$np$＝一定（$\lambda$）のときに該当&lt;/li&gt;
&lt;li&gt;$n$ が変化する事象には不適（インプレッション数が大きく変動する場合だとNG）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;この分布を$Po(\lambda)$と表記&lt;/li&gt;
&lt;li&gt;期待値＝分散＝$\lambda$&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="負の二項分布"&gt;負の二項分布&lt;/h4&gt;
&lt;p&gt;（例）あるwebサイトのページごとの1日のPV数の分布
&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="負の二項分布"
class="image_figure image_internal image_unprocessed"
src="/images/analytics/dnbinom.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ポアソン分布と似ているが分散が大きい
&lt;ul&gt;
&lt;li&gt;0が多い&lt;/li&gt;
&lt;li&gt;大きな外れ値がある&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ゼロが多い、分散が大きいカウントデータに適用&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;成功確率 $p$ の事象が $k$ 回成功するまでに何回失敗するか&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="連続型確率分布"&gt;連続型確率分布&lt;/h3&gt;
&lt;h4 id="正規分布"&gt;正規分布&lt;/h4&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="正規分布(50,10)"
class="image_figure image_internal image_unprocessed"
src="/images/analytics/dnorm.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;分布の王様。理論上いろいろ便利&lt;/li&gt;
&lt;li&gt;期待値 $\mu$、分散 $\sigma^2$ の正規分布を$N(\mu, \sigma^2)$と表記&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="指数分布"&gt;指数分布&lt;/h4&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="指数分布(0.07)"
class="image_figure image_internal image_unprocessed"
src="/images/analytics/dexp.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
ランダムな事象の発生間隔（待ち時間）&lt;br&gt;
（例）メールを受信する間隔&lt;/p&gt;</description></item><item><title>機械学習の種類と特徴、ビジネスにおけるデータ分析の意味</title><link>https://www.marketechlabo.com/statistics-analysis/machine-learning-business/</link><pubDate>Mon, 23 Jan 2017 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/statistics-analysis/machine-learning-business/</guid><description>
&lt;h2 id="機械学習"&gt;機械学習&lt;/h2&gt;
&lt;p&gt;「明示的にプログラムしなくても学習する能力をコンピュータに与えること」&lt;/p&gt;
&lt;p&gt;つまり1から10までをプログラムしなくても、与えられたデータに基づいてコンピュータが学習し、賢くなっていくようにすることである。具体的には適切な分類、予測、レコメンド、異常検知を行う。また複数の選択肢から適切な選択を行わせるものもある。&lt;/p&gt;
&lt;h3 id="学習の仕方による分類"&gt;学習の仕方による分類&lt;/h3&gt;
&lt;h4 id="教師あり学習"&gt;教師あり学習&lt;/h4&gt;
&lt;p&gt;材料のデータと答えのデータを与えることで、正解率を高めていくものである。さまざまな要因のデータと、それに基づいて実際に発生した結果のデータがあって、要因から結果を分類／予測するケース。ここでは結果が教師データになる。&lt;/p&gt;
&lt;p&gt;たとえばEメールの本文テキストがあって、それがスパムかどうか判断する場合、スパムかどうかの判断が教師データということになる。他にもインターネット広告のクリエイティブの種類、配信日時、配信先媒体などのデータからクリックするかしないかを予測する場合、クリックしたかどうかのデータが教師データになる。&lt;/p&gt;
&lt;p&gt;以下の目的で使うことが多い。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;分類（スパムメール／スパムでない）&lt;/li&gt;
&lt;li&gt;予測（CVR）&lt;/li&gt;
&lt;li&gt;異常検知（センサーデータからシステムの異常を検知して通知する）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;代表的なアルゴリズムは&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;回帰
&lt;ul&gt;
&lt;li&gt;線形／非線形&lt;/li&gt;
&lt;li&gt;正則化回帰&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SVM&lt;/li&gt;
&lt;li&gt;判別分析&lt;/li&gt;
&lt;li&gt;k近傍法&lt;/li&gt;
&lt;li&gt;ニューラルネットワーク&lt;/li&gt;
&lt;li&gt;決定木（decision tree）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="集団学習"&gt;集団学習&lt;/h4&gt;
&lt;p&gt;教師あり学習の中でも、上記の個別の手法を1回単独で用いた結果というのは精度が低い場合がある。しかし1個1個の結果の精度が低いものでも、それらを大量に組み合わせれば精度は高くなる。&lt;/p&gt;
&lt;p&gt;そこで同じデータからランダムサンプリングで抽出したデータによる個別手法の分析を何度も行って、その個別の結果を合算して最後に一つのアウトプットを出すという手法が集団学習である。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;bagging(Bootstrap aggregating)&lt;/li&gt;
&lt;li&gt;boosting&lt;/li&gt;
&lt;li&gt;random forest&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="教師無し学習"&gt;教師無し学習&lt;/h4&gt;
&lt;p&gt;正解のデータはない。特定のアウトプット（「CVする」「しない」など）を導くのではなく、似たもの同士をまとめるなどデータを眺めるのに使う。&lt;/p&gt;
&lt;p&gt;またレコメンドも基本的には教師なし学習としてレコメンドを行うもので、そこからの反応の有無を教師データとして与える場合もある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;クラスター分析&lt;/li&gt;
&lt;li&gt;主成分分析&lt;/li&gt;
&lt;li&gt;SOM&lt;/li&gt;
&lt;li&gt;協調フィルタリング&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="強化学習"&gt;強化学習&lt;/h4&gt;
&lt;p&gt;「うまいことやってくれる」正解自体はないが、機械が選択した結果に基づいた&lt;strong&gt;報酬&lt;/strong&gt;があり、その報酬に基づいて学習していくタイプのものである。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;バンディットアルゴリズム&lt;/li&gt;
&lt;li&gt;Q学習&lt;/li&gt;
&lt;li&gt;DQN（Deep Q-Network）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="ディープラーニング深層学習"&gt;ディープラーニング（深層学習）&lt;/h4&gt;
&lt;p&gt;ニューラルネットワークを多層化した技術である。学習の仕方（教師あり、教師なし、強化学習）とは別の軸にある技術で、これらの各学習方式と組み合わせて使われる。&lt;/p&gt;
&lt;p&gt;画像認識、音声認識、自然言語処理など、従来の機械学習では難しかった複雑なパターン認識を可能にした。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CNN（畳み込みニューラルネットワーク）&lt;/li&gt;
&lt;li&gt;RNN（再帰型ニューラルネットワーク）&lt;/li&gt;
&lt;li&gt;トランスフォーマー&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="出力の形式による分類"&gt;出力の形式による分類&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;分類&lt;/li&gt;
&lt;li&gt;クラスタリング&lt;/li&gt;
&lt;li&gt;回帰&lt;/li&gt;
&lt;li&gt;次元縮小&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;分類の中に教師あり学習もあれば強化学習もある&lt;/p&gt;
&lt;h3 id="推測統計-or-機械学習"&gt;推測統計 or 機械学習&lt;/h3&gt;
&lt;p&gt;推測統計と機械学習、全く異なるものではないが、そもそも&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;統計の手法はもともと意味を理解するためのものであり理解しやすさが重要&lt;/li&gt;
&lt;li&gt;機械学習は予測や分類などを正確にできればいい。意味より、モデルを使った予測そのものの精度や頑強性が重要&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;という文化の違いがある。&lt;/p&gt;
&lt;p&gt;分析に使うデータの量においても姿勢の違いがある。ビッグデータ？スモールデータ？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;推測統計はスモールデータ（サンプリング）&lt;/li&gt;
&lt;li&gt;機械学習はできるだけビッグデータ（クラスタリングなど、目的上サンプリングできないものもある）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;身近な分野での違いは&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;歴史のあるマーケティングリサーチは推測統計の考え方で&lt;/li&gt;
&lt;li&gt;アドテクは機械学習（オーディエンスの分類／コンバージョンの予測）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="データ分析とビジネス"&gt;データ分析とビジネス&lt;/h2&gt;
&lt;p&gt;ビジネスにおけるデータ分析の位置づけを。&lt;/p&gt;
&lt;h3 id="データを活用したビジネスサイクルの理想像"&gt;データを活用したビジネスサイクルの理想像&lt;/h3&gt;
&lt;p&gt;ビジネスのイシューと結びつかなければデータ分析をする意味がないが、データからイシューを考える（data-oriented）アプローチと、イシューから考えてデータにたどり着く（issue-oriented）アプローチがある。&lt;/p&gt;</description></item><item><title>Javascriptで正規分布の実装まとめ（乱数、累積分布関数など）</title><link>https://www.marketechlabo.com/statistics-analysis/normal-distribution-javascript/</link><pubDate>Wed, 10 Apr 2019 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/statistics-analysis/normal-distribution-javascript/</guid><description>
&lt;p&gt;Javascriptで正規分布の乱数発生（rnorm）、確率密度関数（dnorm）、累積分布関数（pnorm）、累積分布の逆関数（qnorm）を実装する。すべて標準正規分布を想定。
Javascriptに限らず使えるアルゴリズムだが、日本語でまとまっている情報があまりないのと、ブラウザ上でA/Bテストなど有意性をみる検定などできたら面白いということでJSでやってみる。&lt;/p&gt;
&lt;p&gt;なお、実務で手軽に使いたい場合は &lt;a href="https://github.com/stdlib-js/stats-base-dists-normal"&gt;stdlib-js&lt;/a&gt; や &lt;a href="https://jstat.github.io/"&gt;jStat&lt;/a&gt; といったライブラリも検討するとよい。本記事はアルゴリズムの中身を理解する目的で、ライブラリを使わずスクラッチで実装する。&lt;/p&gt;
&lt;h2 id="正規乱数の生成rnorm"&gt;正規乱数の生成（rnorm）&lt;/h2&gt;
&lt;p&gt;1行でBox-Muller法で。&lt;/p&gt;
&lt;h3 id="box-muller法とは"&gt;Box-Muller法とは？&lt;/h3&gt;
&lt;p&gt;$$X_1, X_2 \stackrel{i.i.d.}{\sim} {\rm Unif} (0, 1) $$
とするとき
$$Y_1 = \sqrt{-2 \log{X_1}} \cos{2 \pi X_2} $$
$$Y_2 = \sqrt{-2 \log{X_1}} \sin{2 \pi X_2} $$
で生成される
$$Y_1, Y_2 \stackrel{i.i.d.}{\sim} {\rm N} (0, 1) $$
というもの。
今回は1個の正規乱数でいいので、$Y_1$か$Y_2$の一方を採用すればいい。&lt;/p&gt;
&lt;h3 id="javascriptで実装"&gt;Javascriptで実装&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;rnorm&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;sqrt&lt;/span&gt;(&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;random&lt;/span&gt;())) &lt;span style="color:#f92672"&gt;*&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;cos&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;PI&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;random&lt;/span&gt;());
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;後ろの係数は&lt;code&gt;Math.cos()&lt;/code&gt;でも&lt;code&gt;Math.sin()&lt;/code&gt;でもどちらでもいい。Javascriptの&lt;code&gt;Math.random()&lt;/code&gt;は戻り値の区間が[0,1)なので、$log {0}$で発散しないように&lt;code&gt;1-Math.random()&lt;/code&gt;としている。&lt;/p&gt;
&lt;h2 id="確率密度関数dnorm"&gt;確率密度関数（dnorm）&lt;/h2&gt;
&lt;p&gt;$$Z(x) = \frac{ e^{ -\frac{x^2}{2}} }{\sqrt{2 \pi}} $$
そのまんま&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;dnorm&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;x&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;exp&lt;/span&gt;(&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;x&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;x&lt;/span&gt; &lt;span style="color:#f92672"&gt;/&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;) &lt;span style="color:#f92672"&gt;/&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;sqrt&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;PI&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="累積分布関数pnorm"&gt;累積分布関数（pnorm）&lt;/h2&gt;
&lt;p&gt;Abramowitz and Stegun, Handbook of Mathematical Functions (1964)から。
&lt;a href="https://personal.math.ubc.ca/~cbm/aands/"&gt;https://personal.math.ubc.ca/~cbm/aands/&lt;/a&gt;
26.2が正規分布の累積分布関数の項目。
実際はC. Hastings, Jr., Approximations for Digital Computers (1955)に基づいているとのこと。
26.2.17の
$$P(x) = 1 - Z(x) \left( b_1 t + b_2 t^2 + b_3 t^3 + b_4 t^4 + b_5 t^5 \right) + \epsilon(x) $$
$$t = \frac{1}{1+px}, \quad Z(x) = \frac{ e^{ -\frac{x^2}{2}} }{\sqrt{2 \pi}} $$
$$|\epsilon(x)| \lt 7.5 \times 10^{-8} $$
$$p = .23164 19 $$
$$b_1 = .31938 1530 $$
$$b_2 = -.35656 3782 $$
$$b_3 = 1.78147 7937 $$
$$b_4 = -1.82125 5978 $$
$$b_5 = 1.33027 4429 $$
をそのまま実装&lt;/p&gt;</description></item><item><title>回帰分析とその派生手法、数理モデリング、発展的な統計解析手法</title><link>https://www.marketechlabo.com/statistics-analysis/regression-modeling/</link><pubDate>Tue, 31 Jan 2017 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/statistics-analysis/regression-modeling/</guid><description>
&lt;p&gt;いわゆる回帰分析に代表される数理モデリングとその種類を説明していく。&lt;/p&gt;
&lt;h2 id="数理モデリング"&gt;数理モデリング&lt;/h2&gt;
&lt;h3 id="数理モデリングの考え方"&gt;数理モデリングの考え方&lt;/h3&gt;
&lt;p&gt;因果関係を定量化
「Xという要因→Yという結果」という関係を
$$Y=a+bX$$
で表す。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;X＝説明変数（独立変数）&lt;/li&gt;
&lt;li&gt;Y＝被説明変数（従属変数、目的変数）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;いわゆる「回帰分析」である。&lt;/p&gt;
&lt;h4 id="目的"&gt;目的&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;因果関係とインパクトの大きさの特定&lt;/li&gt;
&lt;li&gt;予測&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="モデリングの手続き"&gt;モデリングの手続き&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;モデル式の選択（単回帰、ロジット、…）
従属変数の特徴（分布の形状、ばらつき方）によって適切なモデルを選択する&lt;/li&gt;
&lt;li&gt;パラメータの推定
さまざまな推定法がある（最尤法、最小二乗法）&lt;/li&gt;
&lt;li&gt;そのモデルでいいか検証
&lt;ul&gt;
&lt;li&gt;あてはまりのよさ（fit）
&lt;ul&gt;
&lt;li&gt;決定係数&lt;/li&gt;
&lt;li&gt;AIC&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;残差の評価（独立性、正規性、等分散性、線形性）
&lt;ul&gt;
&lt;li&gt;予測値 vs 残差&lt;/li&gt;
&lt;li&gt;正規QQプロット&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;外れ値の評価
&lt;ul&gt;
&lt;li&gt;てこ比&lt;/li&gt;
&lt;li&gt;Cookの距離&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;バリデーション（検証用データで予測精度を見る）&lt;/li&gt;
&lt;li&gt;その他（Profit / Lossなど）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;モデルを選択
ダメな場合、変数の出し入れや変数変換を試す&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="よく出てくる問題"&gt;よく出てくる問題&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;変数が多すぎる→どう縮約するか&lt;/li&gt;
&lt;li&gt;過学習⇔凡化性能&lt;/li&gt;
&lt;li&gt;sparse data（ゼロが多い隙間だらけのデータ）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="線形回帰モデル"&gt;線形回帰モデル&lt;/h3&gt;
&lt;p&gt;最もシンプルな回帰分析
$$y = a + b_1 x_1 + b_2 x_2 + \cdots + u$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$a$：説明変数によらない確定的な影響度&lt;/li&gt;
&lt;li&gt;$b$：説明変数の影響力の大きさ
→これらが回帰係数&lt;/li&gt;
&lt;li&gt;$u$：誤差項&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="推定法"&gt;推定法&lt;/h4&gt;
&lt;p&gt;最小二乗法&lt;/p&gt;
&lt;h4 id="見るべきポイント"&gt;見るべきポイント&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;因果の意味&lt;/li&gt;
&lt;li&gt;回帰係数（パラメータ）&lt;/li&gt;
&lt;li&gt;決定係数：回帰式の説明力の大きさ&lt;/li&gt;
&lt;li&gt;そもそもモデルが妥当かどうか&lt;/li&gt;
&lt;li&gt;残差（ばらつき、偏り）&lt;/li&gt;
&lt;li&gt;多重共線性（説明変数間の相関）の有無&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="一般化線形モデルglmgeneralized-linear-model"&gt;一般化線形モデル（GLM＝Generalized Linear Model）&lt;/h3&gt;
&lt;p&gt;線形回帰の一般形。
線形回帰モデルは従属変数が正規分布という前提があるが、
さまざまな分布の従属変数に拡張した回帰の手法になる。
$$y = a + b_1 x_1 + b_2 x_2 + \cdots + u$$&lt;/p&gt;</description></item><item><title>比較のための統計解析手法～さまざまな仮説検定から分散分析、多重比較</title><link>https://www.marketechlabo.com/statistics-analysis/hypothetical-testing/</link><pubDate>Mon, 30 Jan 2017 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/statistics-analysis/hypothetical-testing/</guid><description>
&lt;h2 id="分析手法"&gt;分析手法&lt;/h2&gt;
&lt;p&gt;目的とデータの性質に基づいて手法を選択&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;目的
&lt;ul&gt;
&lt;li&gt;違いがあるか知りたい＝A/Bテスト&lt;/li&gt;
&lt;li&gt;（因果）関係を知りたい＝何が効くかを知りたい&lt;/li&gt;
&lt;li&gt;予測&lt;/li&gt;
&lt;li&gt;分類
&lt;ul&gt;
&lt;li&gt;従属変数があって、それを分類するもの（クラス分類）&lt;/li&gt;
&lt;li&gt;独立変数のみで、似ているものをまとめるもの（クラスタリング）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;レコメンド&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;データの性質（手法の前提条件）
&lt;ul&gt;
&lt;li&gt;離散か連続か&lt;/li&gt;
&lt;li&gt;正規性&lt;/li&gt;
&lt;li&gt;等分散性&lt;/li&gt;
&lt;li&gt;従属変数の分布の形状&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://readingmonkey.blog45.fc2.com/blog-entry-262.html"&gt;http://readingmonkey.blog45.fc2.com/blog-entry-262.html&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="仮説検定"&gt;仮説検定&lt;/h2&gt;
&lt;h3 id="仮説検定とは"&gt;仮説検定とは？&lt;/h3&gt;
&lt;p&gt;基本的に&lt;strong&gt;比較する&lt;/strong&gt;ための方法
「A/Bテスト」→理論的に正確な手順がある。
※比較する対象は2つ。3つ以上だと別の手法を用いることになる&lt;/p&gt;
&lt;h4 id="仮説検定の考え方"&gt;仮説検定の考え方&lt;/h4&gt;
&lt;p&gt;「ある仮説が正しいと仮定したとき、この事象が発生するのは発生するのはあり得ないくらいレア。だからその仮説は間違っている」&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;（例）「バナーAとバナーBのクリック率が同じと仮定したとき…」＝帰無仮説&lt;/li&gt;
&lt;li&gt;「あり得ない」＝5%。この値をp値という&lt;/li&gt;
&lt;li&gt;「間違っている」と判断すること＝棄却する&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="帰無仮説の意味"&gt;帰無仮説の意味&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;仮説は間違っていることを前提に立てられる&lt;/li&gt;
&lt;li&gt;「ある仮説が正しいと仮定したとき、この事象より極端な事象が発生するのは20％程度。レア度＝20％ということで、そこまでレアではない」
このような場合には帰無仮説は棄却されない。だからといってその仮説は正しいのか？&lt;/li&gt;
&lt;li&gt;厳密にはさまざまな帰無仮説が考えられるが、ほとんど同一性の検定。つまり「AとBが同じ」であることが帰無仮説として扱われる&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="対立仮説と片側検定両側検定"&gt;対立仮説と片側検定／両側検定&lt;/h4&gt;
&lt;p&gt;帰無仮説：「バナーAとバナーBのクリック率が同じ」
では対立仮説は？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「バナーAのCTR＞バナーBのCTR」&lt;/li&gt;
&lt;li&gt;「バナーAのCTR＜バナーBのCTR」&lt;/li&gt;
&lt;li&gt;「バナーAのCTR≠バナーBのCTR」&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;実はいずれにも設定できる。それによって棄却域が変わってくる。&lt;/p&gt;
&lt;h4 id="2種類の過誤"&gt;2種類の過誤&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;第1種の過誤＝帰無仮説が実際には真であるのに棄却してしまう過誤（正常なメールをスパムと判定）&lt;/li&gt;
&lt;li&gt;第2種の過誤＝帰無仮説が実際には偽であるのに採用してしまう過誤（スパムメールを正常と判定）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;手法あれこれ
&lt;a href="http://d.hatena.ne.jp/hoxo_m/20150217/p1"&gt;http://d.hatena.ne.jp/hoxo_m/20150217/p1&lt;/a&gt;
&lt;a href="http://www.shiga-med.ac.jp/~koyama/stat/s-index.html"&gt;http://www.shiga-med.ac.jp/~koyama/stat/s-index.html&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="具体的な手法"&gt;具体的な手法&lt;/h3&gt;
&lt;p&gt;前提条件&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;対応のある標本か、対応のない標本か（対応の有無）&lt;/li&gt;
&lt;li&gt;標本の分布が正規分布に従うかどうか（正規性）
&lt;ul&gt;
&lt;li&gt;Shapiro-Wilk test / Rでは&lt;code&gt;shapiro.test()&lt;/code&gt;{stats}&lt;/li&gt;
&lt;li&gt;Anderson-Darling normality test / Rでは&lt;code&gt;ad.test()&lt;/code&gt;{nortest}など&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;各標本の分散が同一かどうか（等分散性）
&lt;ul&gt;
&lt;li&gt;正規分布であればF-test / Rでは&lt;code&gt;var.test()&lt;/code&gt;{stats}&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="1標本で母集団の分布に対する検定"&gt;1標本で母集団の分布に対する検定&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;手法名&lt;/th&gt;
&lt;th&gt;特徴&lt;/th&gt;
&lt;th&gt;Rの関数&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Student&amp;rsquo;s t-test for one sample&lt;/td&gt;
&lt;td&gt;母分散が未知の母平均に対する検定。母集団の正規性を仮定するが、サンプルサイズが十分大きい場合は中心極限定理により多少の非正規性にはロバスト。標本分散を使うのでt検定&lt;/td&gt;
&lt;td&gt;&lt;code&gt;t.test(ベクトル, mu=母平均)&lt;/code&gt;{stats}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One sample Kolmogorov-Smirnov test&lt;/td&gt;
&lt;td&gt;ノンパラメトリック。標本が特定の分布に従うかどうかの検定。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ks.test(ベクトル, 'p分布名', 分布のパラメータ...)&lt;/code&gt;{stats}&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="対応のある2標本の比較"&gt;対応のある2標本の比較&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;手法名&lt;/th&gt;
&lt;th&gt;正確な帰無仮説&lt;/th&gt;
&lt;th&gt;前提条件&lt;/th&gt;
&lt;th&gt;Rの関数&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Student&amp;rsquo;s t-test for paired samples&lt;/td&gt;
&lt;td&gt;2群が同じ分布に従う（平均値が等しい）&lt;/td&gt;
&lt;td&gt;正規性：要 等分散性：要&lt;/td&gt;
&lt;td&gt;&lt;code&gt;t.test(ベクトルA, ベクトルB, paired=T)&lt;/code&gt;{stats}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wilcoxon&amp;rsquo;s signed-rank test&lt;/td&gt;
&lt;td&gt;2群の代表値に差がない&lt;/td&gt;
&lt;td&gt;正規性：不要 等分散性：不要&lt;/td&gt;
&lt;td&gt;&lt;code&gt;wilcox.test(ベクトルA, ベクトルB, paired=T)&lt;/code&gt;{stats}&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="対応のない2標本の比較"&gt;対応のない2標本の比較&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;手法名&lt;/th&gt;
&lt;th&gt;正確な帰無仮説&lt;/th&gt;
&lt;th&gt;前提条件&lt;/th&gt;
&lt;th&gt;Rの関数&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Student&amp;rsquo;s t-test&lt;/td&gt;
&lt;td&gt;2群が同じ分布に従う（平均値が等しい）&lt;/td&gt;
&lt;td&gt;正規性：要 等分散性：要&lt;/td&gt;
&lt;td&gt;&lt;code&gt;t.test(ベクトルA, ベクトルB, paired=F, var.equal = T)&lt;/code&gt;{stats}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Welch&amp;rsquo;s t-test&lt;/td&gt;
&lt;td&gt;2群の平均値の差がない&lt;/td&gt;
&lt;td&gt;正規性：要 等分散性：不要&lt;/td&gt;
&lt;td&gt;&lt;code&gt;t.test(ベクトルA, ベクトルB, paired=F, var.equal = F)&lt;/code&gt;{stats}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mann-Whitney&amp;rsquo;s U-test Wilcoxon&amp;rsquo;s rank-sum test&lt;/td&gt;
&lt;td&gt;2群が同じ分布に従う&lt;/td&gt;
&lt;td&gt;正規性：不要 分布形状がほぼ同じであることが望ましい（その場合、中央値の差の検定として解釈可能）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;wilcox.test(ベクトルA, ベクトルB, paired=F)&lt;/code&gt;{stats}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Brunner-Munzel test&lt;/td&gt;
&lt;td&gt;2群から一つずつ値を取り出したとき、どちらが大きい確率も等しい&lt;/td&gt;
&lt;td&gt;正規性：不要 等分散性：不要&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brunner.munzel.test(ベクトルA, ベクトルB)&lt;/code&gt;{lawstat}&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;※Brunner-Munzel testは小標本ではpermuted Brunner-Munzel testがいい&lt;/p&gt;</description></item><item><title>記述統計～統計的にデータを見る視点</title><link>https://www.marketechlabo.com/statistics-analysis/descriptive-statistics/</link><pubDate>Sat, 21 Jan 2017 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/statistics-analysis/descriptive-statistics/</guid><description>
&lt;h1 id="記述統計"&gt;記述統計&lt;/h1&gt;
&lt;p&gt;統計の手法には記述統計と推測統計があると説明したが、ここでは記述統計の話。記述統計の考え方を通じて、より進んだデータの見方を学んでいく。&lt;/p&gt;
&lt;h2 id="記述統計とは"&gt;記述統計とは&lt;/h2&gt;
&lt;p&gt;記述統計とはすべてのデータを見て正しく全容を把握・認識するための方法論・作法。
全てのデータを見るのでデータマイニング的なアプローチ。
仮説ありきではないので、記述統計の方法だけではデータの組み合わせが膨大だと有効な知見を得るに至らないこともある。
後でどんな手法を使う際にも、それは推測統計や機械学習の手法を使う場合であっても、データを見るという観点ですべての基本の考え方になる。&lt;/p&gt;
&lt;h2 id="データの種類"&gt;データの種類&lt;/h2&gt;
&lt;p&gt;データは特徴によって分類される。
種類によってデータ加工方法から分析手法も変わってくる。
どんな観点で分類するのか、分類のポイントを紹介していく。&lt;/p&gt;
&lt;h3 id="尺度"&gt;尺度&lt;/h3&gt;
&lt;p&gt;尺度とは、ざっくり言うと数字のなす意味、その数字が対象の特徴をどのように説明するかによる分類。こう言うと難しいので、実際の内容を具体的に見ていこう。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;定性的データ（カテゴリカルデータ）
&lt;ul&gt;
&lt;li&gt;名義尺度：数字は単なる名前・ラベルであって、その大小に意味はない。
（例）性別／1＝男性、2＝女性&lt;/li&gt;
&lt;li&gt;順序尺度：大小比較できる。ただし差に意味はない。
（例）満足度／1＝不満、2＝どちらでもない、3＝満足&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;定量的データ
&lt;ul&gt;
&lt;li&gt;間隔尺度：差に意味がある。比に意味はない。つまり割り算する意味がない
（例）温度（℃）「30℃は15℃の2倍」とは言わない、日付&lt;/li&gt;
&lt;li&gt;比例尺度、比尺度：比率にも意味がある。0が基準となるもの。
（例）身長、訪問客数&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下の尺度は上の尺度の性質をすべて含む。尺度によって使える分析手法が異なる。&lt;/p&gt;
&lt;h3 id="変数の数"&gt;変数の数&lt;/h3&gt;
&lt;p&gt;変数の数による分類。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1次元データ&lt;/li&gt;
&lt;li&gt;2次元データ&lt;/li&gt;
&lt;li&gt;多次元データ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ビジネスの世界で実際に直面するデータは多次元データばかりだろう。&lt;/p&gt;
&lt;h3 id="データセットの種類"&gt;データセットの種類&lt;/h3&gt;
&lt;p&gt;タイミングと観測対象によって分類&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;横断面（クロスセクション）データ
1つの時間を切り取って（同じタイミング）、その中で複数の対象（顧客など）についてのデータ&lt;/li&gt;
&lt;li&gt;時系列データ
1つの対象についての時間経過とともに記録したデータ&lt;/li&gt;
&lt;li&gt;パネルデータ
クロスセクションかつ時系列のデータ、複数対象の時をまたいだデータ。購買履歴などの履歴データや、同じ対象に対する同一アンケート調査を毎年行ったデータ（横断面データを定期的に収集していったもの）がこれに該当する。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="生ログ-or-集計済みデータ"&gt;生ログ or 集計済みデータ&lt;/h3&gt;
&lt;p&gt;データというのは
自動取得されるアクセスログや、実査を行うアンケートであれば個票データになる&lt;strong&gt;大元のデータ&lt;/strong&gt;
があり、それを
アクセス解析ツールやアンケート集計ツールを使って&lt;strong&gt;集計された形で&lt;/strong&gt;アウトプットが出てくる
という流れになっていることが多い。
この大元の生のデータか、それとも集計済みのデータか、それが大きな分類となる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;アンケート調査：個票データ or 集計データ&lt;/li&gt;
&lt;li&gt;アクセス解析：webサーバの生ログ or GAの管理画面のデータ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;生ログは情報自体は豊富に含まれるのだが、人間が見ても分かりにくい、認識しにくいものである。
わかりやすく集計されたデータを見れば何が起こっているか、データの意味がよくわかる。
だからわれわれは集計済のデータを使って分析するのが基本である。
生ログからはいかようにも集計が可能だが、一度集計されてしまうとログに戻すことはできない。
集計は何らかの情報を切り取る作業であり、データのサイズは小さくなる（ことが多い）が、同時に失われる情報もある。
通常生ログから集計を何ステップか経てデータを扱うが、データを保持するとき、どの段階のものを保持するのか、その後の利用シナリオを考慮したうえで設計する必要がある。
集計データを扱う場合、集計の過程で&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;集計の切り口が限定されてしまい、任意の変数の関係を見ることができない&lt;/li&gt;
&lt;li&gt;何らかのロジックに基づいて分類を行った場合、その分類ロジックがブラックボックスになってしまう。たとえばアンケート結果を要約してポジティブ／ネガティブと分類したうえで集計した場合、ポジティブ／ネガティブの分類基準は集計結果データには含まれない。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ことに留意する必要がある。&lt;/p&gt;
&lt;h2 id="代表値とばらつき"&gt;代表値とばらつき&lt;/h2&gt;
&lt;p&gt;データの特徴を一言で、ではなく、一つの数値で表したもの。&lt;/p&gt;
&lt;h3 id="代表値中心傾向"&gt;代表値（中心傾向）&lt;/h3&gt;
&lt;p&gt;代表値はデータを代表する、データを一言で言い表す値。たとえば身長のデータだったら「大体このくらいの長さだよね」というのが代表値を意味する。それそのものでは意味の分からない「○○指数」のようなものであったとしても、「この○○指数というのは大体このくらいの大きさだよね」というのが最初の議論になるだろう。
つまりデータの中心の位置、数値の大小を表すものになる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;算術平均（mean）
一般的な平均の概念。観測値の合計を個数で割る。
$$\bar{x} = \frac{1}{n} \sum^n_{i=1} x_i$$
外れ値や歪んだ分布に弱い（外れ値があると算術平均値が変わる、分布がの歪みが少し極端になるだけで算術平均値が変わる）&lt;/li&gt;
&lt;li&gt;中央値（median）
データを下から順に並べてちょうど真ん中の番目の観測値
&lt;ul&gt;
&lt;li&gt;データの個数が奇数（たとえば19個）の場合、10番目の値&lt;/li&gt;
&lt;li&gt;データの個数が偶数（たとえば20個）の場合、10番目の値と11番目の値の算術平均（真ん中がないため）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;最頻値（mode）
データの中で最も頻出する値
&lt;ul&gt;
&lt;li&gt;変数が離散の場合、そのまま最も頻出する観測値を指す&lt;/li&gt;
&lt;li&gt;変数が連続の場合、データをいくつかの等間隔の区間に区切ってヒストグラムにしたときの、最も頻度が高い区間を指す（基本的に同じ値が発生するものではないため）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;刈り込み平均（trimmed mean）
データの上下○％の順位のデータを除外した残りの観測値の算術平均&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;中央値、刈り込み平均は外れ値や歪んだ分布に対しても頑健（外れ値があっても中央値は変わらない、分布が少々歪んでも中央値は変わらない）。
&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="右に歪んだ分布"
class="image_figure image_internal image_unprocessed"
src="/images/analytics/positively-skewed-distribution.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
このような分布においては
最頻値＜中央値＜算術平均
となる。&lt;/p&gt;</description></item><item><title>データ分析の目的、考え方、フレームワークと統計</title><link>https://www.marketechlabo.com/statistics-analysis/objectives-approach-data-analysis/</link><pubDate>Fri, 20 Jan 2017 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/statistics-analysis/objectives-approach-data-analysis/</guid><description>
&lt;h1 id="データ分析の考え方"&gt;データ分析の考え方&lt;/h1&gt;
&lt;p&gt;データに基づいて意思決定をすることは、もはやビジネスの前提となった。
AIがデータ分析のワークフローを大きく変えつつある今だからこそ、その土台となる「考え方」を正しく理解しておくことが重要である。&lt;/p&gt;
&lt;p&gt;データ分析がビジネスの課題を何でも解決してくれるのだろうか？&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="あいまいなデータ分析像"
class="image_figure image_internal image_unprocessed"
src="/images/analytics/analysis-vague.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;データ分析には役割と守備範囲、正しい手法というものが決まっている。
間違った使い方をすると間違ったインサイトを導き出すことになる。&lt;/p&gt;
&lt;p&gt;何でもデータ分析が解決してくれるわけではなく、データ分析の守備範囲とそうでない部分は峻別しなければならない。
データ分析を正しく理解して実務に役立てていくために実務上、最低限抑えておけばいいところをまとめていく。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;そもそもデータ分析とは何なのかを整理し&lt;/li&gt;
&lt;li&gt;データ分析と向き合う正しい姿勢と最低限の知識を説明する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="明確なデータ分析像"
class="image_figure image_internal image_unprocessed"
src="/images/analytics/analysis-distinct.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="データ分析の目的"&gt;データ分析の目的&lt;/h2&gt;
&lt;p&gt;データ分析には目的がある。主に以下の4種類に分けられる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;予測&lt;/strong&gt;：売上予測、クリック率予測&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;意思決定&lt;/strong&gt;：どの変数がどれだけのインパクトで効いているのか
→アクションの方向性・タイミングを見出す、配信アルゴリズムを決める&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;レコメンド&lt;/strong&gt;：どんな商品をレコメンドするのがいいか&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分類&lt;/strong&gt;：セグメントを作る、何と何を同じものとして扱えばいいか&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;目的に応じて手法が変わってくる。いま直面しているイシューはどれに当てはまるだろうか。&lt;/p&gt;
&lt;p&gt;いずれにせよ「だから●●」というアウトプットがある、&lt;strong&gt;示唆を得ること&lt;/strong&gt;が重要になる。&lt;/p&gt;
&lt;h2 id="分析とは"&gt;分析とは？&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;分けていくこと&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;分析とはその字の通り「分けていくこと」である。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;全体の「コンバージョン率」の大小を見る（&lt;strong&gt;指標&lt;/strong&gt;）&lt;/li&gt;
&lt;li&gt;「流入元」ごとの「コンバージョン率」を見る（切り口＝&lt;strong&gt;ディメンション&lt;/strong&gt;）&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="指標とディメンション"&gt;指標とディメンション&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;「流入元」ごとの「コンバージョン数」&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;最初はざっくりと単一の数値そのものを見る。流入数、売上、利益など。これが指標となる。&lt;/p&gt;
&lt;p&gt;次に商品、営業ブロック毎といったように数値を見る切り口が加わる。これがディメンションとなる。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;○○ごとの△△&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;これがデータを見る基本の考え方となるので、いま見ている指標とディメンションが何なのかを常に意識することが重要である。
「分ける」キーになるものである。&lt;/p&gt;
&lt;p&gt;ディメンションごとの指標を見るのはクロス集計、要するに縦横。
クロス集計の考え方と方法は後で説明する。&lt;/p&gt;
&lt;p&gt;GoogleアナリティクスでもAdobe Analyticsでも、
BIツールや初歩的なデータ分析ツールは共通してこの考え方に基づいてデータを操作する。
高度な統計解析手法も基本的に指標とディメンションを複雑に組み合わせた（モデル化した）ものである。&lt;/p&gt;
&lt;p&gt;分析ツールによっては&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;指標はmetrics, measure（メジャー）などの単語で置き換えられる&lt;/li&gt;
&lt;li&gt;ディメンションはそのままdimensionとして使われることが多い&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ただ指標とディメンションを眺めているだけでは分析ではない。
それは数字を見ているだけで、何も言えない、知見にならない。&lt;/p&gt;
&lt;p&gt;知見を導き出すための分析的視点としてここから深掘りする際に3つの方向性がある。
それがセグメント、推移、ベンチマークである。&lt;/p&gt;
&lt;h3 id="比較して違いを見つけること"&gt;比較して違いを見つけること&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;ケース1&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ページ&lt;/th&gt;
&lt;th&gt;流入数&lt;/th&gt;
&lt;th&gt;CVR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;記事A&lt;/td&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;記事B&lt;/td&gt;
&lt;td&gt;400&lt;/td&gt;
&lt;td&gt;2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;記事C&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;2%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;ケース2&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ページ&lt;/th&gt;
&lt;th&gt;流入数&lt;/th&gt;
&lt;th&gt;CVR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;記事A&lt;/td&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;記事B&lt;/td&gt;
&lt;td&gt;400&lt;/td&gt;
&lt;td&gt;1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;記事C&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;5%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;どちらのほうが意味を見いだせるか、知見を導き出すポテンシャルがあるか？&lt;/p&gt;</description></item></channel></rss>