Hatena::ブログ(Diary)

yokkunsの日記

2014-07-21

Rではじめるビジネス統計分析 という本を執筆しました!

Rではじめるビジネス統計分析 という本を執筆しました!


内容は、以下のような感じです。

御社のビッグデータから隠れた“X(宝)"を見つけ出せ!

2013年以降、企業内部で肥大化したビッグデータ(構造化されてない大量のデータ)を利用する動きが活発になってきています。

大量のデータを分析することで、ビジネスで言えば商品の売れ筋やトレンド情報の把握、予測などに役立てることができます。

本書は無料で利用できるRという統計ソフトを用いて、ビジネスの現場で役立つ専門的な統計分析について解説した書籍です。

Part1では、Rの使い方の基本について、Part2では統計分析の基本を、Part3ではサンプルを元にした本格的なビジネス統計データ分析手法について解説します。

全体を通して、入門的な要素を押さえつつ、本格的な分析手法まで丁寧に解説しています。

これ1冊で、ビジネスの現場で活用できる本格的な統計データ行うことができます。

またどの業界の方でも入りやすいように身近なサンプルを元に解説します。

数式や分析手法など、つまづきやすい部分については適時コラムなどで解説します。

なおRは最新の3.Xに対応しています。


途中でいろいろあって、かなりタイトなスケジュールになったのですが、いい感じにまとまってます。

興味ある方はぜひご購入ください!!


関連

以下の本も絶賛発売中なので、こちらもぜひ!

あと、初の単著ももう少しで出ます!

2014-06-11

ビジネス活用事例で学ぶ データサイエンス入門 という本を書きました (その2)

ビジネス活用事例で学ぶ データサイエンス入門 という本を執筆しました!


まだ発売前ですが、前回に引き続き、少しだけ中身を紹介してみたいと思います。

興味がありましたら、是非ご予約ください!

2.ビジネスにおけるデータ分析フロー

データ分析における5つのフロー

ビジネスにおけるデータ分析の目的は、ビジネスで発生したさまざまな問題を統計解析や機械学習データマイニングの各種方法論を駆使して解決することと言えます。

ここで気をつけたいのが、あくまでも問題解決が目的ということです。

たとえば、データ分析専任の会社に分析を依頼したら、やたら難しそうな大量の資料がでてきた。

結論はよく考えると当たり前のことだった、といったことはないでしょうか? 

学術の分野からデータ分析者となった分析者、あるいはビジネスを熟知していない外部組織の分析に頼るときに良く起きる現象です。

高度で複雑なモデルによる高精度な分析結果は、実は必ずしもそれだけでは価値が高いとは言えません。

複雑なモデリングに時間をかけるよりも、簡単なクロス集計(分割表)を用いて短時間で分析結果を出したほうが、価値が高いということもビジネスの現場では珍しくはありません。

解決すべき問題に合わせて、「データ分析者」が分析方法の設計、実行できることが大事であり、

そこを誤ってしまうと、データ分析の価値は乏しくなってしまう可能性があります。

では、具体的にはビジネスにおけるデータ分析はどのように進めていくのでしょうか? 

それぞれの組織構造で若干の違いはありますが、大きくは以下のフレームワークで進められています。

...

f:id:yokkuns:20140611085004p:image:w200


現状とあるべき姿

「問題」は、そのときの、そのビジネスがおかれている環境から作り出される「あるべき姿」によって変わります。

例えば、野球好きが集まったとします。

みんな野球好きなので、「野球が上手くなりたい」という共通の目的がありますが、

人によっては、

  • 1年後にメジャーリーグに挑戦したい (無理っぽい)
  • 2年後の草野球で勝てればいい (効率悪い)
  • 3年後に全国大会に出たい (時間かかりすぎ)

と、理想像が異なっています。

このような理想がずれている状態で取り組んでも分析は上手く機能しません。

このような場合、まず現実的な時間と到達点を整理するのも分析者の仕事になります。

...


  • あるべき姿が明確でない時のイメージ

f:id:yokkuns:20140611085715p:image:w400


整理した結果、来年までにピッチャーが140km/hの玉を投げられる状態と決まったとします。

共通の理想像はすり合っている状態ですが、現状についてはまだ分かっていません。

人によっては、

  • もう139km/hくらい出てるよ (過大評価)
  • いやいや、まだ100km/h程度だ (過小評価)

と現状の認識が合っていません。

このような場合も、そのまま取り組んでも分析は上手く機能しないため、

まず現状の定量化するということから始める必要があります。

  • 現状が明確でない時のイメージ

f:id:yokkuns:20140611085716p:image:w400


問題発見

データ分析においては、「現象」と解決すべき「問題」とは、明確に区別する必要があります。

「売上が落ちている」や「顧客が離脱している」などは、ビジネスの文脈では通常「問題」として挙げられます。

しかし、データ分析の文脈では、実はこれらはただの「現象」にすぎません。

これらの「現象」をもとに、企画職・エンジニア職・サービス運用職など、ビジネス担当者でしっかりと議論し、

解決すべき「問題」を見つけ出すことが重要です。

...


  • 「現象」と「問題」とを区別する
  • 「あるべき姿」をイメージして、「現状」のギャップを意識する
  • 問題発見のための3つの切り口

データ収集と加工

解決すべき問題が明確になったら、その問題を検証するために必要なデータを集めます。

...

  • データ加工

分析に必要なデータを収集したら、次は、分析するためにデータ加工を行ないます。

一般的なデータ分析の教科書では、分析手法理解を目的としているため、その手法を実行するために都合の良いデータが用意されています。

しかしながら、実際のデータ分析の現場では、分析手法にあわせ、自分で都合の良いデータを加工していくことが必要となります。

...



データ分析

ビジネスにおけるデータ分析は、その問題の種類によって、「意思決定支援」と「自動化・最適化」の2つに大別できます。

まず「意思決定支援」のほうは、問題解決のためのアクションを人間が決定・実行するのを支援することを目的にしています。

そのため、人間が理解して適切な判断ができることが重要になってきます。

こちらを主眼としたデータ分析では、高度で複雑なモデルよりも、よりシンプルで理解しやすいモデルが効果的であり、クロス集計が活躍する場面です。

一方「自動化・最適化」のほうは、問題解決のためのアクションをコンピュータに実行させるためのアルゴリズムの構築が目的になります。

そのため、理解しやすさよりも、アルゴリズムの計算量と精度が重要視されます。


意思決定支援 自動化・最適化
目的 人間のアクション決定の支援 コンピュータのアクション支援
目標 コミュニケーションコストの低減 推定精度向上、計算量削減
良く使われる手法 単純集計、クロス集計 機械学習アルゴリズム構築

...

アクション

アクションは「人間が意思決定をして新たに何かをはじめる/やめる」ものと、

「アクションを実行するためのアルゴリズムを構築してコンピュータで実行させる」ものの2つがあります。

これは前述のデータ分析のところで説明した「意思決定支援」と「自動化・最適化」と対応しています。

...


f:id:yokkuns:20140611102305p:image:w500


参考

2014-06-06

ビジネス活用事例で学ぶ データサイエンス入門 という本を書きました (その1)

ビジネス活用事例で学ぶ データサイエンス入門 という本を執筆しました!

まだ発売前ですが、少しだけ中身を紹介してみたいと思います。

興味がありましたら、是非ご予約ください!

はじめに

(※出版社を配慮し、原文そのままではないです)

日々、データ分析の実務をしていると、次のような言葉をよく聞きます。

  • A. 膨大な費用を使ってデータを収集し解析してもらったけど、期待したほどの爆発的な効果はでてこないなぁ。
  • B. 分析部署から詳細な報告を送ってくれるのですが、やたら難しい報告書で、とても読めません。
  • C. 一応データは残していますが、忙しくて分析しきれていないんです。
  • D. データは全て残しています。ですが、どう見たらいいのか困っています。
  • E. 重要な数値は毎日確認しているけど、それを見て実際どうのようにしたらいいのかわからなくて……。
  • F. うちは担当者の実務経験にまかせているよ。データよりも当てにしているから。
  • G. データ? 分析? いやとにかく、できることをがんばればいいんですよ。

データ分析は、さまざまなシーンでビジネス効率を上げることに役立ちます。

我々の体験でも、さまざまな業種、さまざまな職域において、効果の大小こそあれ、役に立つことが多いです。

しかしながら、上記のように、実際には企業内での定着に向けて、課題が多いという実情があります。

上記の言葉の背景にあるものを、分析者の視点から考えてみると

  • A’. データ分析、特に機械学習などを、人間にわからない何かが見つかる魔法と勘違いしている。
  • B’. データ分析が、複雑な数値解析による現象解説のみになっている。
  • C’. データは保存しているが、分析に作業時間や人員などがさけない。
  • D’. データは保存しているが、分析ノウハウがない。
  • E’. 売上などの重要な数値では現状把握はできているが、その数値から今後具体的にどう行動したほうがよいかわからない。
  • F’. データ分析と実務経験は補完関係で相乗効果があることを知らない。
  • G’. ただがんばる業務を、より効果的に、ただがんばる業務にできることを知らない。

おおむね、このようなところに落ちつきます。

一般的に、何かを成功させるためには、知る、わかる、できるようになる、成功させることができる、という1つ1つに大きな障壁のある階層があります。

上記のそれぞれ悩みをみると、知らない、わからない、できない、うまく達成できない、と階層が異なるもののデータ分析がビジネスでほんとうに達成可能なことの大枠を知らない。

つまり、そのような情報が少ないということに帰結しそうです。

そこで我々は、この本を通し、実際のビジネスのなかで「データ分析」を行なうことで、何ができるのか、どういうふうに役に立たせることができるのか、を示していきます。

具体的に想定する読者ですが

  • ビジネスのデータ分析に関心がある人
  • 実際にビジネスでデータ分析を行なっている人

と大きく2つにわけ、それぞれを念頭に執筆しました。

f:id:yokkuns:20140606174638p:image


  • 1章
    • ビジネスのデータ分析にたずさわるデータ・サイエンティストの実態を紹介していきます。
  • 2章
  • 3〜6章
    • データ分析に関心のある人向けにデータ分析の基礎を説明しています。
    • 基礎となる部分ですので、実際このままの形でビジネスに使えるチャンスは少ないのですが、なるべく実務にあわせる形で、ビジネスのデータ分析にまつわる考え方や、実際のやりとりといった業務の説明をおこないました。
  • 7〜10章
    • ソーシャルゲーム事業で分析業務を行っているかた、あるいはIT業界、さらには他の業界において分析業務をおっている方を対象に、データ分析の応用事例を紹介しました。
    • この本のオリジナリティがでるよう「なるべく既存のデータ分析の書籍にはないような分析」かつ「我々が実際に行なっている分析」というなかから4つほどのケースを紹介しました。

データ分析について解説した類書では、書籍の内容にあわせ都合よく用意されたデータを分析していきます。

しかし多くのみなさんはそれらの説明が実務には応用しにくかったという経験はないでしょうか? 

この本では、それぞれのケースのなかで最初からきれいではない、いくつかの前処理が必要なデータを用意しました。

このようなデータに対して統計解析の道具をどのように活用していくのかについて、その詳細が明らかになるように構成を工夫しました。



2014-03-16

kmeansで楽できる(かもしれない)パッケージを作った

k-means法は、非階層的クラスタリング代表的手法ですごく便利ですが、使って行く上で、以下の2つが問題になってきます。

この2つの弱点に対して拡張版や手法が提案されていますが、すごくシンプルな方法で解決するパッケージを作ってみました。

その名もykmeansパッケージ・・・!


このパッケージは、上記の二つの問題に対して、以下のアプローチで対応しています。



N回実行して一番多く分類されたクラスタを採用する

例えば、あるデータで100回実行して、そのクラスタ平均値プロットすると、↓のようにクラスタの中心が結構ぶれます。

http://i.gyazo.com/a32a20645d641732e371fdb864a04cc4.png

クラスタの中心がずれると、当然分類されるクラスタが変わってしまうデータが出てきます。

なので、1回だけの実行では中々不安になってきます。


そこで、このパッケージでは、

「とりあえず100回くらい実行すれば安定するだろう」

という仮定のもとに、100回実行して、一番多く分類されたクラスタを採用しています。

(※回数は指定出来ます)


任意変数クラスタ分散平均値が小さくなるクラスタ数を採用する

自分がクラスタリングを使うときは、目的にもよりますが、ある程度クラスタ数の範囲は事前に決めています。

多すぎると解釈や説明がつらくなってくるので、3〜6、多くて10くらいに設定するのが多いです。

また、「クラスタリングして終わり」ではなく、各クラスタのKPIを比較するなど別の分析があります。

なので、クラスタ内で、見ようと思っているKPIが出来るだけ近い方が都合が良いです。


そこで、このパッケージでは、

「見ようと思っている変数が、クラスタ内でなるべく散らばらないクラスタ数」

を採用しています。



使い方

  • ykmeans (x, variable.names, target.name, k.list, n)
x データフレーム
variable.names クラスタリングの時の使う説明変数
target.name クラスタ間で比較しようと思っている変数
k.list クラスタ数候補
n 試行回数
実行例
  • 使うデータ
library(ykmeans)

head(actData)
##       y x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17
## 1 17030  7  3  4  3  3  3  3  2  3   3   1   2   3   2   2   2   2
## 2  1360  5  3  4  4  2  4  3  0  4   2   2   2   2   1   2   2   1
## 3  1360  7  4  3  4  2  4  3  3  2   3   2   2   2   2   2   2   1
## 4   100  5  2  3  2  3  1  2  3  2   1   2   1   1   2   1   0   1
## 5   320  4  3  3  2  3  1  2  2  1   1   2   2   1   1   2   1   0
## 6  2820  7  4  3  4  3  4  3  3  2   3   3   1   2   2   2   1   1
ykm <- ykmeans(actData, paste0("x", 1:17), "y", 3:6)
table(ykm$cluster)
## 
##   1   2   3   4   5 
## 140  92  16 148 104
    • このデータでは、3〜6個のクラスタ数を試して「5」が採用されています。

2014-03-14

R CMD checkでno visible binding for global variable 'hoge'

久しぶりにCRANにアップしようと思ったら、R CMD checkで以下のようなのが出てきたのでメモ。

* checking R code for possible problems ... NOTE
[関数名]: no visible binding for global variable '[変数名]'
...

注意されてる変数関数内で初期化すればオッケーなのだが、

plyrとかで使う変数に対しても上記のメッセージが出てしまう。

例えば、関数内で作ったデータフレームを使って、

res <- ddply(data, .(id), summarize, avg=mean(a))

というコードを書いてると、

* checking R code for possible problems ... NOTE
[関数名]: no visible binding for global variable 'id'
[関数名]: no visible binding for global variable 'a'

って出てしまう。

少し気持ち悪いけど、これも初期化してしまえば、とりあえずメッセージは出なくなる。

id <- NULL
a <- NULL;

res <- ddply(data, .(id), summarize, avg=mean(a))