読者です 読者をやめる 読者になる 読者になる

データサイエンスしてみる

新米エンジニアがデータサイエンスを勉強する。機械学習とかRとかPythonとか

Azure Machine Learningを使ってみたら思ったよりよかった

Grahamianです。 タイトルどおりです。

数年前からクラウド機械学習サービスがでてきていましたが、そのときは全然興味ありませんでした。
データサイエンスって前処理が面倒なんで機械学習だけクラウドで出来てもなーって感じ。
とか思っていたんですが、つい先日、ちょっとクラウド機械学習を調べてた思ったより良かった…舐めてた…
azure.microsoft.com

Summary

GoogleとかAmazonも触ったけどデータサイエンスという文脈なら、圧倒的にAzure最強でした。

どこが?

Azureのよいところはプログラミングできなくても大体の処理ができてしまうところ。
PythonとかRはプログラミング初心者でもわりと書きやすいのですが、それでも細かいところでハマります。
環境構築とか、ちょっとした記法のミスとか。
そこらへんがGUI上でサクサク作れてしまうのはいいですね。
やっぱりプログラマー以外にはCUIって結構ツライです。
Azureならブロックをつなげていくだけで基本的な処理ができてしまうので簡単。

分析の結果もVisualizationしてくれ分かりやすいです。
自動でいい感じにROC曲線とか決定木を書いてくれるのが最高。
前処理が面倒って話に隠れちゃいますが、実はこの後処理ってのも結構面倒です。
Azureなら自動でカッコいい絵にしてくれるので、このままレポート作れますね。
便利。最高。

とは言え、簡単な処理は出来るけど凝った処理になると途端に面倒になるサービスって多いんですよね。
おもちゃ的なサービスは取っ掛かりとしてはいいけど、やっぱり業務には使えなかったりして。
Azureはそこも考えられていてSQLPython、Rを書いて処理に使えるようです。
これが非常に便利そう。
内部にAnacondaを持ってるらしくて大体のことができる様子。
細かいとこはコード書けば処理できるし、基本はGUIで処理できる。
コードはブロック化できるので可読性高くできる点は非常に良いです。

GoogleとかAmazonは?

Google機械学習のリソースとして使う仮想マシンって感じです。
データサイエンスの文脈では使いにくいです。
機械学習をガッツリやるエンジニア向けですね。
Deep Learningとかガリガリやるならいいかも。

AmazonはAzureと同じで基本的な分析ができます。
AWSと連携できるので便利。
ウィザード形式で進み、予測したいデータの属性で勝手に分類器を選んでくれます。
ただ、これが非常に使いにくかったです。
慣れたら違うかもしれないけど自由度も低そうだし要らないかな?

ってことで

Azure Machine Learningはいいぞ。

pandasでiterrowsしようとしてハマった話

お早うございます。grahamianです。
タイトルどおりです。

DBからデータを取ってきてpandasのdataframeに入れてrowごとに処理するってことをやろうとしてました。
よくある処理だと思います。
で、最初は何も考えないで

for row in df:
   foo = bar(row['data'])

ってやろうとしたら動かないんですね。
ちょっと考えたら当たり前で、pandasは行列を扱っているので行か列を明示的に書いてやる必要があります。
そのために、iterrowsとiteritemsってメソッドがあります。
それぞれ行、列にイテレートするメソッドです。

それを調べた私は次のように書ききました

for row in df.iterrows():

で、とりあえずfooの中身を見るとrowが入ってるから「ヨシ」と思って作業をしてました。
しかし、どうも動作がおかしい。
なのでいろんなサイトを見ていて気がついたのが、同時にindexもfor文で回しているのです

for i, row in df.iterrows():

こうすることで思ったとおりに行の中身だけ取り出すことができました。
思わぬところでハマったのでメモ程度にここに書いておきます。
pandasはヘンなとこでハマるのでちゃんと勉強しないといけないなーと感じた事件でした。

自然言語処理技術の開発は検索方法を変えるのか?

こんにちは。Grahamianです。
今日は自然言語処理と検索方法について考えてみます。

www.itmedia.co.jp

chat botなんかが最近は話題になったりして人間vs機械の会話が注目されていますね。
いろんなサービスでchat botを使われるようになっています。
実際に使ってみると、それなりに上手くこっちの聞きたいことを理解してくれているように感じます。
ただ、やっぱり上手くいかないときの方が多いです。

たとえば、
「タイ料理じゃない安いお店がいいな」
って聞くと安いタイ料理のお店がでてきたります。
これは否定形を上手くとらえられていないんですね。
最近は↑くらいなら解釈できるようになってきましたが複雑になると途端に理解できなくなります。

chat botではキーワード抽出がメインになっているのでこのような状態になっています。
文脈とか構文解釈はとてもむずかしいんです。
RNNとか使ってやろうとしている人もいますが、やはり複雑な構文を理解することは難しいです。

さらに会話となると文脈というものが生まれます。
さっき言ったことを覚えているってのは結構難しいんです。
ここらへんはLSTMとか時系列データを扱うMLの発達ですね。

さて、chat botなど自然言語処理を用いた検索エンジンを触っていると普段の自分の検索方法の偏りを感じます。
みなさん大好きGoogleですが、Googleで検索するときはキーワードをスペースで区切って検索します。
この方法が一般的になっていて誰も疑問を思い浮かべずに慣れきってしまっていますね。
でも最初にGoogleで検索したときは誰もが「なんで文章で打ち込んだらダメなんだろう?」って感じたはずです。
今ままでは、技術的に難しく、キーワードを区切るという方法を持ち込んでいました。
しかし、技術の発達によって自然な文章で検索できるようになってきているんですね。
ところが、逆にGoogleの方式に慣れすぎていて「文章で検索とかダルいしやらないでしょ」とみんな感じています。
とても面白いですね。
本来不自然なUXなはずなのに慣れすぎて本来自然な方法が使いにくく感じてしまうわけです。

これからchat botが普及していったら逆にキーワードで区切る方法が廃れていくのでしょうか?
将来はキーワードで区切る方法はレガシィと呼ばれる時代がくるのかもしれません。

技術の発達がUXを変えていくのはとてもおもしろいです。
本当にこの世界は目が離せないですね。

ロボアドバイザーってどうよ?

おはようございます。
Grahamianです。

今日のニュースは↓
www.fina-sol.com

ここ2, 3年で金融業界に一気に人工知能技術、というか機械学習プロダクトが一気に増えました。
いわゆるFintechってやつですね。

金融は数字データが多いので機械学習と親和性が高いと言われています。
為替とか株価とか財務諸表は数字で示されますからね。
確かにインプットデータをいろいろいじってやらなきゃいけない画像や音声よりは楽そうです。

中でも投資先の与信診断や管理をする技術に関しては「カン」や「経験」に頼らずにデータドリブンでできるのは価値あると思います。
ただ、消費者向け商品はまだまだイケてない感じありますね。

最近だとロボアドバイザーが有名です。
↑の記事の他にもtheoとか。

投資では投資先のリスクとリターンのバランスが非常に重要です。
これは個人投資でも同じで、特に投資信託ETFを用いた長期投資で言われてます。
このバランスをどうするべきかは一般に金融工学を用いることで簡単に決めることができます。
ポートフォリオのリスク・リターン曲線とか言われているヤツです。
このリスク・リターン曲線上でリスクを取るか安全性を取るかってのは個人の好みです。

実際にリスクとリターンと安全性をどうとるかってのは結構悩みの種でして、年齢とか給与をもとに考えます。
ただ正解の無い問題なので難しいです。
これを、いくつかの質問をもとにリコメンドするのがロボアドバイザーです。
リコメンドしたバランスを保つように勝手にリバランスしてくれるようです。
リバランスとは金融商品を売買して指定のバランスになるようにする行為を指します。
要約すると長期投資する上で重要なことをやってくれるAI商品ってことです。

んで、この商品は2つ問題を抱えていると思います。
1つ目は「コストが高い」ってこと、2つ目は「人工知能関係無いやん」です。

1つ目のコストが高いってのは深刻な問題です。
投資、特に長期投資ではコストが非常に重要です。
勝ち負けが50%ならコストがあるだけ資産が目減りします。
長期投資ではリターンがある程度決まっているのでコストの影響は大きいのです。
Theoは信託報酬が1%です。
しかし、購入している商品を見ていくと信託報酬は概ね0.5〜0.2%です。
Theoで購入している商品は個人でも購入できるので自分で購入したら一気にコスト削減できます。
自分で買ったら0.5%だとしてTheoが1%ならコスト半減ですね。
自動でやってくれるにしてもちょっと高いかなあ、って思います。
この自動でやってくれることに価値を感じるのかもしれませんが、後述するとおり、わりといい感じに売買することは簡単です。

で2つ目の人工知能関係ないって話は、商品が良ければ別にいいんですが人工知能プロダクトを作ってる身としては気になります。
人工知能を使って投資」と聞くと「人工知能が勝手に儲けてくれる」と思いがちですが実際はそんなことありません。
購入している商品は一般に販売されている投資信託ETFですし、アクティブに売買して稼いでくれるわけじゃないんです。
それなりに投資の勉強をすれば上記のような金融工学的なアプローチは簡単に学べます。
効率的フロンティアに則って売買している個人投資家はかなり多いです。
というかここは金融工学の分野で定式化されていて、シミュレータもネット上にはたくさんあります。

また、どのリスクリターンと安全性の選択は人工知能を通すまでもなく一般的な指針があります。
ロボアドバイザーを使ってみた感じではほぼ指針どおりの答えを出してくれます。
なので、なんだか微妙だなあって感じ。
上述のとおりコストが高いのでそのコスト分の価値を感じません。


と、まあこんな感じで個人投資家としてある程度知識があるとあんまり恩恵を感じないのがロボアドバイザーです。
自動リバランスとかは助かるのですが年に数回しかないのを考えると時間削減にもなりませんし。
いい感じで買うにもちょっと学べばできてしまうので知識を購入している感覚もありません。

ただ、投資関係の知識がない人から見ると価値があるのかも、とは思います。
実際に、投資知識は無いけど投資してみたいって人はたくさんいるので。
(そういう人は投資しない方がいいと思うけど)
そうするとやはりコストが重要かなーと。
もっとコストが減ったら知識が無くてもそれなりの投資ができるので魅力的だと思います。
利用者が減ってスケールしたらコストも減っていくので今後に期待です。

「AIによる高度な評価」という便利で意味のない言葉

www.fashionsnap.com

某D○NAみたいなこともありましたし、こういった考え方をもったサイトが生まれるのはとても良いことだと思います。

思いますが、記事中にこんな記述があります。

「データとAIによりコンテンツを客観的に評価し、雑誌編集のノウハウを知る編集部員が責任のある編集を行った後に、ユーザーごとに個別最適化して配信する。」

AIによる評価、とはなんでしょう?
good or badの二値ラベルを貼り付けてbowでSVMまわすとか?
その中身に透明性がない限りAIで評価するって言葉にはなんの価値もありません。
せめてインプットデータや解析手法がでてこないとなんとも…。
というか、記事の信憑性なんて評価することがとてもむずかしいので、AIでどうにかなる問題でもないと思います。
好みを見つけるAI技術なみにふわっとした設計ですね。

AIって言葉がバズワードになって久しいですが、未だにAIって言葉でふわっとプロダクトを作る詐欺みたいな案件多いですね。
AI作る側としてはこういった詐欺プロジェクトが減っていって欲しいところです。

人工知能が記事を書く時代になりました

jp.techcrunch.com

つまるところ、企業の出す決算短信など適時開示情報をもとに各社の要約文を出力するわけですね。

実際に出力されている文章をみると割りとルールベースなのかな?って感じです。
たとえば数値について言及しているあたりは企業の過去データが存在すればルールベースで出力できそうです。
後半の企業の事業に関する部分こそAI的ですね。
日経のサイトを見る限りはtfidfやセンチメント分析によって重要単語や情勢を抜き出しているようですね。
ここらへんは割りと枯れた技術なので上手くできそうです。
日経なのでニュースデータに関してはたくさんあるでしょうし、こういったデータを出力するのは上手くできそうです。

総じてみると、とても「上手くやってる」プロダクトって感じです。
枯れた技術と蓄えたデータを上手く活用したいい例じゃないでしょうか?
無理に最先端の技術を使わなくてもこういったいいプロダクトが作れているのだと感じます。
まだテスト段階なので裏側では人間がチェックしているのだと思いますが、とても上手く作れていると思います。

企業の衰勢については数値が重要なので、むしろこういったAIで書いたほうがいいのかもしれませんね。
アナリストレポートなんかはアナリストの主観がバリバリに入っていて「それってあなたの感想ですよね?」みたいなのもたくさんありますから。
逆に数学的に出力されているのはブレがなくて信用できるかも。

こういったレポートは形式も決まっているのでAIにはとても向いていると思います。
ロジカルに出力できるレポートはAIで出力される時代になるでしょうね。

機械学習で理由も説明させる

こんにちはGrahamianです。

こんなニュースがありました。
www.gizmodo.jp

要約するとdeep learningの結果に対して結果の理由を添えてくれる、というもの。

単層パーセプトロンのようなシンプルなものはまだ理由が考えやすかった。
これはインプットに直接重みが与えられるためである。
インプットベクトルのi番目の重みが大きいから、なるほどこの項が重要なんだな。とか。
なので上手くいかないときの修正がそこそこ容易だし、モデルとデータの関係も把握できた。

ところが深層学習ではデータを圧縮して計算に使う。
そのため計算途中で何がエフェクティブなのかわからなくなってしまっている。
(word 2 vecの論文で「なぜか分からないが上手くworkする」と書かれているのは有名)

これは運用中にヘンな結果になったとき何を変えればいいのかわからなくなってしまう。
もちろん、システムを考えればなんとなく何が重要なのかは分かるけど、それは"カン"でしかない。
特に最近流行りのめちゃくちゃ深い深層学習とか複数のセルを組み合わせたものはもう分からない。
なのでこういうシステムの需要はとても大きかった。

っていうのが記事中の研究の意義ですかね。
これの面白いところって複数の解析結果を組み合わせて表現できるってとこですね。
中間言語のようなものができているのでしょうか?
「バットを持っている人」の写真の圧縮ベクトルから「バットを持っている人」という文字列を生成できる訳ですから。
これはある種のsemantic分析(意味分析)ができているとも言えるのでは?
マシンに「バットをもっている人」という共通のベクトルを持たせることに成功していると仮定したらですが。

これを発展させれば、今までは1対1で学習させていたものを汎用的に使えるようになります。
今後に期待ですね。