TokyoR(第43回)でLTしてきました
半年以上空いての更新となってしまいました。
文章としてアウトプットする習慣がなかなかつかないです。
本題。昨日TokyoRでLTをしてきました。
内容はRのrandomForestの説明と、
使えるメモリに制限がある場合の工夫の仕方についてです。
今回の発表の準備を通して、randomForestが返すオブジェクトの
中の見方が分かったりしたので個人的には非常に有意義でした。
ご指摘もありましたが、さっさとOSを64bitにするというのが私もベストだと思います。(プライベートで使うPCへの投資はなかなか億劫。。)
ですが、ちょっとした工夫で省メモリになったり、高速になったりすることに喜びを感じる私の様な方も少なくないと思いますので、この資料がその様な方々のお役に立てば幸いです。
丸一年経ちました
また久しぶりの更新となってしまいました。
最近は、webサイトのクローリングをちょこちょこ行っています。
これについてはまた改めて書くかも、しれません。
データサイエンティストという言葉を知り、目指し始めたのが去年のこの頃だったと思うので、一年間の振り返りと今年の抱負などを書いてみたいと思います。
■データ整形
当時はまだ、ほとんどperlも触ったことがなくデータ整形を行うのにも非常に時間を費やしていましたが、現在はサクサクと手が動く様になりました。
ただ、複雑なデータ構造を扱うときに、稀にハマるのでまだまだスピード向上の余地があると思っています。
また、モジュールについての知識が全然ないので、今年は便利そうなモジュールはどんどん使ってみる様にしたいです。
■分析
学生の頃行っていた分析はExcel+SPSSだったのですが、SPSSは会社で使っていないのでKnimeとRを主に使うことになりました。
最初は、集計や可視化を行うのも一苦労でしたが、現在は一先ず自分で確認する分には十分になりました。今年は、クライアントさんにそのままお見せできる様な綺麗な可視化、カッコいい可視化ができる様になりたいです。
また、モデリングに関してはlogistic regressionやrandom forestを中心として色々行ってきたので、一応なんとか使えるレベルにはなったと思っています。ただ、変数の作り方やチューニングの仕方についてはまだまだなので、今年はもっと上手くできる様に勉強したいと思います。
■理論
・機械学習
最初は全然理解できないことばかりでしたが、繰り返し繰り返し同じことについて説明している多数の資料を見ることで概念についてはなんとなく理解できる様になってきたと思っています。(数式アレルギーも徐々に克服中)
今年は概念だけでなく、情報理論や確率過程など基礎となる理論についても少しずつ理解を深めていきたいと考えています。
・統計学
統計学は学生時代から使っていたので、他部署の方に仮説検定などについて説明する機会があり、少しは役立てたのではないかと考えています。しかし、基礎的な検定であるχ2乗検定を行うことがあり、その時にすぐ計算ができなくて困ったことがありました。基礎的なものこそ当たり前の様に計算できなければならないと思うので、時間を作って一度振り返りたいものです。
以上、1年間の振り返りと今年の抱負でした。
組織的な色々な問題もあるのですが、環境に振り回されず着実にレベルアップしていきたいと思います。
pythonについて
業務で使う必要があったのでpython始めました。
ソースの可読性が高いなと早速感じていて
一人で勉強するのに向いているなと思います。勉強します。
CentOSに入れようとしたら依存関係の解決が色々面倒だったので断念して、
Windowsに入れました。
本体は本家(http://www.python.org/)から、
パッケージは先輩から教えてもらったところ(http://www.lfd.uci.edu/~gohlke/pythonlibs/)から落として入れました。
バイナリで入れられるので非常に楽でした。裏技みたいな感じ。
たまにここに上がっているバージョンじゃダメだったりするので適宜その場合はアンインストールして入れなおす感じの様です。
近況について
7月末からお盆辺りにかけて担当していた案件が忙しくブログの更新をサボっていました。何となく罪悪感があります。すみません。
最近は仕事が落ち着いたので、為替のデータに対して機械学習を行って儲けられないかとか色々やってました。そのうち結果が出たらブログにまとめようと考えています。
なかなか予測精度が上がらないので「どうして予測できないのかについて」語る可能性が高いですが。
昨日は恒例のTokyo.Rに参加してきました。
細かい感想や意見などは割愛しますが、アカデミア、ビジネスの各方面で活躍されている方々の話は面白かったです。
彼らの話についていくためには休んでいる暇はないなと感じました。努力を続けます。
とりあえず、生きていますということで。
MeCabの辞書編集について
MeCabは以前にも紹介しました形態素解析エンジンです。MeCabを使うと文章を単語に切り分けることができます。
デフォルトの辞書でもそこそこ上手く行くのですが、
固有名詞やあまり一般的でない語句などは変な場所で切ってしまったり、単語と単語を切り離しすぎてしまう場合があります。
例えば、「データサイエンティスト」で抽出したいのに
データ 名詞,一般,*,*,*,*,データ,データ,データ
サイエンティスト 名詞,一般,*,*,*,*,サイエンティスト,サイエンティスト,サイエンティスト
の様に分かれて出てしまうなど。
そこで、辞書の編集が必要になります。
システム辞書とユーザー辞書があるのですが
今回はユーザー辞書の編集について説明します。
ウェブ上に同じことを説明している資料はたくさんあったのですが、
バージョンの違いなどからそのままでは上手くいかなかったので再編という感じです。
因みに私が使っているMeCabはWindows版、バージョンは0,996で
インストール先はC:\Program Filesです。
以下手順を書いていきます。
[1]ユーザー辞書を作成します。
デフォルトの設定ではMeCabの辞書は以下のディレクトリに置かれています。
C:\Program Files\MeCab\dic\ipadic
ここにuser.csvというファイルを作成します。
このファイルに下のフォーマットに従って単語を書きます。
「表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音」
例えばこんな感じです。
データサイエンティスト,-1,-1,1000,名詞,一般,*,*,*,*,データサイエンティスト,データサイエンティスト,データサイエンティスト
表層形:文章の中に出てくる形です。
文脈ID、コスト:説明すると長くなるので割愛しますが
とりあえず-1,-1,1000で書いておいて問題ないです。
品詞:下のリンク先の一番下の部分を参考に入力してください。
http://mecab.googlecode.com/svn/trunk/mecab/doc/posid.html
活用:名詞などの場合は入力する必要はありませんが、
動詞など活用がある場合はデフォルトのVerb.csvを参考に
活用の情報も入力してください。
[2]コンパイルします。
辞書があるフォルダへ移動して
>cd C:\Program Files\MeCab\dic\ipadicコンパイルします。
>mecab-dict-index -f SHIFT-JIS -t SHIFT-JIS -u user.dic user.csv
-f:コンパイル前のファイルの文字コード
-t:コンパイル後のユーザー辞書の文字コード
-u:コンパイル後のユーザー辞書のファイル名
done!が表示されれば成功です。
念のため編集した単語が上手く切れる様になっているか確認します。
>mecab -u user.dic
データサイエンティスト
データサイエンティスト 名詞,一般,*,*,*,*,データサイエンティスト,データサイエンティスト,データサイエンティスト
-u:使うユーザー辞書の指定
今度は「データサイエンティスト」で抽出できていますね。
[3]毎回ユーザー辞書を指定するのが面倒であれば、デフォルトで使う様に登録をします。
同じディレクトリにあるdicrcというファイルに
userdic=C:\Program Files\MeCab\dic\ipadic\user.dic
と、一行書き足します。
以上で辞書の編集は終了です。
(参考)MeCab/CabChaによる 言語解析演習
http://chasen.naist.jp/chaki/t/2008-09-09/doc/mecab-cabocha-nlp-seminar-enshu-2008.ppt
ビッグデータについて
ビッグデータについて何を今更言うんだって感じですが
自分の考えをまとめるために書いておきます。
ビッグデータとは3Vと言われるVolume(大量)Variety(多種)Velocity(高頻度)の3つのうち1つ以上の概念を持つデータです。
上記の3つにVeracity(正確さ)を足して4Vと言う場合もあるそうですが、
個人的に意味が分からないです。レイヤーが違いますよね?って感じです。
要するにビッグデータとは「ちょっと前までは扱うのが絶望的に難しかったデータ」というものなのです。
それが、テクノロジーの進歩によって比較的容易に集計したり分析したりすることが可能になりました。そして、大手ITベンダー様の営業の甲斐もあり、国内でも意識の高い企業がビッグデータ分析に取り組み始めたというのが現状なのではないでしょうか。
個人的に、「ビッグデータ」が盛り上がることによって、データドリブンな考え方が啓蒙されるのであればそれは嬉しいことだと思っています。しかし、その一方で危惧していることもあります。
まだデータドリブンな考えが根付いていない企業が「ビッグデータを溜める箱」や「ビッグデータを分析できるソフト」を導入しても、その費用に対する効果を上げられないのではないかということです。
「高いお金を出したけれど、ビッグデータって思ってたより使えないし、データ分析とか意味ないね」なんてことになっても誰も幸せになりません。だから、ビッグデータを扱う環境を構築しようとしている企業はまず「データを何に使うのか?どう使うのか?」を社内で議論していただくのが良いのではないかと思っています。
ここで言うデータとは「ビッグデータ」に限りません。ビッグデータを分析しないと分からないこともありますが、スモールデータでもデータを利用する目的を達成できることは少なくないので。
以上などなどにより、市場で流行って欲しい言葉は「ビッグデータ」よりも「データドリブン」とか「データサイエンス」だよなぁと感じています。
データマイニングの方法について
最近知ったデータマイニングのフレームワークについて説明します。
「データサイエンティストって何やってるの??」って方には、彼らの仕事の理解の助けになるかもしれませんが、データマイニングの経験がある方にとってはごく当たり前のことなのでつまらないと思います。その点ご了承ください。
で、早速ですが、有名なフレームワークは3つあります。
1.The KDD process
2.SEMMA
3.CRISP-DM
正確にはそれぞれ違うのですが、根本的にはほぼ同じなので
今回は個人的に一番しっくりくるCRISP-DMについて詳しく説明します。
CRISP-DMとはCRoss Industry Standard Process for Data Miningの略で、
以下の6つのステップから成ります。
[1]ビジネス理解
[2]データ理解
[3]データ準備
[4]モデリング
[5]評価
[6]展開
では、詳細について私の浅い経験と解釈を踏まえて書いていきます。
[1]ビジネス理解:
まず、データマイニングの目的(落としどころ)を決めます。
顧客(社内でも同様)がどのようなビジネスを行っていて
何を求めているのかをヒアリングを通じて把握します。
「データがあるから何とかして!」という無茶振りなケースも少なくないですが、「データから○○が分かる(できる)ようになったら嬉しいですか?」という風に探っていってニーズを引き出します。
[2]データ理解:
その次は、顧客からデータを頂いて中身を見てみます。
データの信頼性(欠損や異常値がどのくらいあるか)をチェックしたり、
簡単な集計や可視化などをPerlやR、Excelなどを使って行います。
「説明を見ると、Aのファイルのこの項目とBのこの項目は同じものを差してるはずだけれど、どうして一致しないの?」なんて苦悩したりします。
[3]データ準備:
そして、詳細な分析、モデリングを行うための準備です。
外れ値や欠損値を除去したり適正だと思われる値で埋める作業や、値を対数や指数変換したり標準化する作業、複数のファイルを統合したり変数を抽出する作業などを行います。
[4]モデリング:
漸く一番データマイニングらしいモデリングです。
RやKNIMEを使って様々なモデルを適用したり色々な分析手法を試します。
モデルのパラメータを変えたり、変数をいじったりして
実際のデータをより適切に表現できるように試行錯誤を重ねます。
[5]評価:
モデリングの結果を評価します。
モデルそのものの精度も重要ですが、他に検証すべき点はないか、この結果で顧客に喜んでもらえるかどうかについて検討します。
[6]展開:
最後に、顧客に報告してビジネスに適用してもらいます。
行ったモデリング、分析の結果をレポートを作成して報告します。
その後、その結果を実際に顧客のビジネスに落とし込む方法について
顧客と共に検討し、適用いただくという感じです。
すでに気付いておられる方もいると思いますが、これらのプロセスは順番に一通りやれば終わるというものではありません。[3]データ準備と[4]モデリングは何度も繰り返しますし、[5]評価を1回でクリアできないことも多々あります。真に求めるものを手に入れるために、以上のプロセスを何度も何度も繰り返します。
巷で言われている様に、求められているアウトプットを最終的に出せるデータサイエンティストはとてもセクシーですが、実際に行っている作業は意外と泥臭いのです。
(参考)
Visual Guides to CRISP-DM ,KDD and SEMMA
http://recipp.ipp.pt/bitstream/10400.22/136/1/KDD-CRISP-SEMMA.pdf
KDD, SEMMA AND CRISP-DM: A PARALLEL OVERVIEW
http://recipp.ipp.pt/bitstream/10400.22/136/1/KDD-CRISP-SEMMA.pdf