図解でわかるスタンフォードの自分を変える教室を読んだ

図解で分かりやすそうだったので買ってみた。
結論としては、分かりやすいし本が薄いのでサクッと読めてよかった。

この本の話題は意志力を鍛える話がメインで、あとは誘惑に負けないための方法とか、人間の心理とはどういうものかを知っておけば対応できるというものだった。

私は意志力というのは基本的には信用していなくて、あまり意志の強さに関係なく物事を遂行するには?を主眼に色々と学習してきていたので、意志力が鍛えられるというのはにわかには信じ難かったのだが、読み進めているうちに、なるほどなーと思わされた。大体が、意志力に関係なく物事を遂行するための方法に近いものはあった。無意識的に意志力を鍛えていたのかもしれないが、それがポジティブな視点でか、ネガティブな視点でか、というのが重要に思える。私はネガティブな視点で意志力は信用できないと思っていたので、もっと信用してもいいかなと思った。

ストレスにさらされると、意志力が一気に弱まって誘惑に負けやすくなるから、ストレスの解消法にも気を配るべきだし、そのストレス解消法は、本当にストレス解消になってるのか?というのにも気を配らないといけない。気を配るというか、知っておく必要がある、ということだ。

ストレスにさらされる環境を自分で作って、それでハッパをかけて取り組むパターンって結構あると思うのだが、これって結構反動が大きいなと感じていた。あんまり自分にはあってないのかもしれないなと思った(例:締切駆動なんちゃらとか)。反動で数週間やる気が完売してしまったりとかもあるし。

ポジティブに自分の意識を捉えて、意志力を鍛えていけるように、習慣を見直していこう。


データサイエンス超入門を読んだ

積ん読していた本を読み終えた。
ビジネスで役立つ統計学の本当の活かし方という副題と、勝ち残るビジネスマンの必須知識という帯に惹かれたのを覚えている。

データサイエンティストの視点がわかって面白い。
統計がビジネスにどう活かされているかということが具体的に書かれているので、活かしどころの参考になった。
また、かなりのパターンが目的もなく「このデータを何かに活かせないか?」というもので困るということが書かれていた。ビッグデータから何かしらの方向性があるかを見つけてほしいという依頼があるのは確かだけれど、目的もなく闇雲に分析しようとしてもコストばかりかかって勿体無いと。データサイエンティストに分析を依頼するときにも、発注者がある程度どういうことを知りたいかを分かった上で依頼できるように、という、発注者向けの本といえる。

なんでデータ分析が今注目されているのかというと、コンピュータの性能がよくなってきて、スポット的にクラウド環境を使って安価に膨大なデータを解析を可能にする土壌ができあがってきたからだろう。昔は、大規模なデータ解析をしようと思ったらマシンを揃えるだけでもお金がかかったし、それをしてもよい結果が得られるかわかったものではなかったが、解析をする時間の間だけ借りられる。いい時代になったものだなぁと思う。まぁそんな使い方は私自身はしたことがないのだけれど…。
でもこれで一部大手企業しかできなかったことが、ほとんどの企業でも可能になったというのはたしかにすごいことだと思う。だからこそ、データサイエンス業界は大盛り上がりだろう。最近も機械学習とかすごい騒がれてますね。

この本で出てくる話題は、Amazonのレコメンドエンジンの話であったり、呟きや位置情報からPush型で通知するクーポンの話、SNSの口コミを解析する話だったり、ECサイトのリニューアル前とリニューアル後での売り上げ比較をしながらどちらが売れるデザインかを調査したりなど、かなり具体的で面白い。MeCabの話が出てきたりもした。

その上で、聞いたことはあるけれどよくわからない統計キーワードについて、統計基礎の章で教えてくれる。この章でも、この統計はこういう場合に使われていると書かれている。

  • 記述統計学
  • 推測統計学
  • 探索的データ解析
  • 機械学習
  • 一般線形モデル
  • 一般化線形モデル

在庫を切らさないために標準偏差を使ったりするところを読むと、なるほどなぁ〜と思わされた。
私はデータ分析とかやったことなかったので、ベイズ統計・マルコフ連鎖・モンテカルロ法の説明を読んでいるだけでも楽しかった。ただ、このあたりは難しくもあったので眠たくなりながら読んだ。

また、野球での統計活用の話(セイバーメトリクス)の話で出てくる、KPIを決定することの重要性も面白かった。よくKPIっていう言葉は見かけるが、毎回ググっては、「あー、はいはい」と思って、また忘れて…を繰り返していたのだが、ようやく意味をちゃんと覚えられそうだ。KPIはKey Performance Indicatorsの略。目標を達成するために最も重要な評価基準のこと。野球の話だと、試合に勝つという目標にたいして、セイバーメトリクスを使って勝率に関わる項目を洗い出して、出塁率をKPIとして定めたと書かれていた。闇雲に練習してもダメってことはないだろうけれど、効果が高いか低いかが、統計で分かってくるということだろう。

あとはIT技術でどういうものが統計で使われているかという話題。HadoopやNoSQL、R言語やApache Mahoutのことが簡単に紹介されていた。OSSの利用で安価にデータ解析ができるようになってきたということがわかるし、レコメンドエンジンにどういうものがあるかもざっくりわかってよかった。

私がデータ分析をやり始めるかどうかというのはまだわからないが、どういう視点を持っていればよいか、統計でどういうことがわかるのかというのを俯瞰的に捉えることができたのは収穫だった。特に数学にも弱いし統計にも弱い自分でもなんとなくわかることができたということは、いい本だったなぁという証拠ではなかろうか。超入門なので、これで統計ができるようになるわけではないが、統計で何がわかるのかという興味を引くには十分な内容だった。


Rails4.2.3でDBのViewをeager_loadingするとViewのデータがnilになる

Rails4.2.1のときにRspecを実行したら通っていたテストが、Rails4.2.3にアップデートしたら急に落ち始めました。

落ちているテストの共通点は、

『(DBの)Viewを使っている』

という点でした。

Elasticsearchにデータをインポートした際に、データが抜けていたので、as_indexed_jsonをしたタイミングでデータが抜け落ちてるのかなと思って、pryを使いながら該当メソッドをコールしたりしていたのですが、データは存在していたため、訳がわからなかったのでした。Viewは使えてるわけです。

そこでRailsの変更履歴を見ていたら、eager_loadのN+1問題の不具合を修正したよっていうやつが。

https://github.com/rails/rails/pull/18765

もしやと思って、Viewをeager_loadした後にViewにアクセスしたら、確かにnilでした。

# Viewのデータが取れるパターン
foo = Foo.find(1)
foo.bar_view # データある

# eager_loadするとnil
foo = Foo.eager_load(:bar_view).first
foo.bar_view # nil

Viewを使っている場合は要注意です。


HerokuのOne-Off Dynoで性能のいいやつを起動する

HerokuでElasticsearchを試すために、SearchBoxアドオンを入れました。
heroku run rails cを行ってOne-Off Dynoを起動し、コンソール上からElasticsearchにデータ投入しようとしたところ、eager_loadをしすぎたためか、コンソールが固まってしまいました…。おいおい、これじゃあデータ投入できへんやないか、と思っていたのですが、やっぱりOne-Off Dynoでも性能の高いDynoで起動することができました。

Heroku: One-Off Dynos

通常だとstandard-1xで立ち上がると思うのですが、以下のように–sizeで指定できました。standard-2xとperformanceがあります。

heroku run --size=standard-2x rails c

これでメモリもがっつりあるし大丈夫だ!と思っていたのですが、既存の利用DynoのプランがFreeとHobbyだと、この技は使えないようです。ですので、もし利用したい場合は一時的にでもプランをProfessional(standard-1x以上)にする必要があります。

One-Off Dynoであれば、利用シーンは短時間なので、performanceを使っても大した金額にはならないだろうから、遅いDynoでウーンと悩むくらいならサクッと使ってみるのも手だと思います。


ElasticsearchのtypeはDBのテーブルほど厳密ではない

typeは似たようなデータの識別子であって、DBのテーブルほど型に厳密ではないようです。

同じindex、違うtypeで同じ名前のfieldを使う場合、

  • A typeのpriceは数字(1000)
  • B typeのpriceは文字列(1,000円)

みたいなことはできないようです。

あくまで概念的にはtypeはテーブルに近いけれど、完全に同じと思って扱ってはならないと。

以下、私と@johtaniさんのツイッターでのやりとり。