u++の備忘録

Kaggle Tokyo Meetup #5 にて「kaggler-ja driven learning」の題目で発表しました

本記事は、kaggle その2 Advent Calendar 2018の1日目の記事だったことにしました(2018年12月11日付)。

qiita.com

12月1日に開催された「Kaggle Tokyo Meetup #5」にて「kaggler-ja driven learning なぜ質問に答え、どう学んでいるか」の題目でLTをしました。

connpass.com


概要

今回は「kaggleの日本コミュニティである"kaggler-ja"のslackにて積極的に発言している」という立場で発表しました。

f:id:upura:20181128130938p:plain

発表の概要は次のスライドにまとめました。

f:id:upura:20181128130949p:plain

余談

完全に余談ですが、このスライドに「僕が質問に答える理由」や「データ分析・機械学習をやっている理由」が凝縮されています。

f:id:upura:20181128131011p:plain

どう学んでいるか

ここでは「参加」「質問」「回答」のステップごとに「自分がどう学んでいるか」などをまとめました。

Step1: 参加してみよう

有用なchannelがたくさんあります。

  • #beginners-help(初心者質問部屋)
  • #leaderboard-live(LB実況、解法共有)
  • #kaggle_general(コンペ情報)
  • #random(雑談、例:tensorflowの読み方)
  • #beginners_bootcamp(in classコンペ開催)

など

f:id:upura:20181128131042p:plain

参加人数も日に日に増加していて、僕のガバガバ試算によると2096年1月に日本の人口を超えるようです。

f:id:upura:20181128131047p:plain

kaggleに興味がある方は、ぜひ参加してみてください。

f:id:upura:20181128134050p:plain

Step2: 質問してみよう

誰しも「初歩的な質問すぎて馬鹿にされないか……?」と心配になるかと思いますが、心配ご無用です。

f:id:upura:20181128131057p:plain

「良い質問」を心がけられると理想的です。「良い質問」にしようと試行錯誤する中で得られる学びも大きいと思います。

f:id:upura:20181128134610p:plain
f:id:upura:20181128131120p:plain

「minimal reprex」については、この辺りが参考になるかと思います。

質問する際「Private sharing」には注意しましょう。

当日にsmlyさんから補足いただきましたが、議論については運営側でも意見が多少食い違っているようです。

f:id:upura:20181128131135p:plain

Step3: 回答してみよう

正直、回答する際にはごく「普通」のことしかしていません。その分、自分ひとりで勉強している際には曖昧にごまかしていた部分に気付いたり、自分の思いつかなかった手法・問題を提示してくれたりと、非常に学びが多いと感じています。

f:id:upura:20181128131139p:plain
f:id:upura:20181128131255p:plain

おわりに

最後に、とある強いkagglerの言葉を引用して、締めの言葉とします。ぜひ、自分なりの範囲で「kaggler-ja driven learning」してみてください。

f:id:upura:20181128131322p:plain

所感

あらゆる発表が知見の塊で、自分の無力さを良い意味で痛感できました。学びのモチベーションが非常に上がっています。

懇親会を通じていろんな方と交流を深められ、有益な時間を過ごすことができました。個人的な話ですが、ずっと憧れていた方と二次会でたまたま隣に座ることができ、LTの感想をもらえたり、たわいない話をしたり、正直今は夢見心地です。

落ち着いたら改めて所感を更新しようと思いますが、今は勢いで投稿しようと思います。幸せな会でした。

追記 20181202

#kaggle_tokyo のハッシュタグが付いた投稿をまとめました。

togetter.com

u++というアカウント名の由来

2013年の秋、大学の知人の勧めでTwitterを始めました。

その時、一番仲良い知人が「U」というアカウント名だったので、パロディで「u」と命名しました。この時代から僕のTwitterを知っている人は、相当な古参ですね。

時は経て、自身の進路を決めるタイミングが訪れ、僕は「プログラミングを自分の武器にしていく」と決意しました。自分の中での一つの区切りとして、この時に変更したアカウント名が「u++」です。

プログラマの皆さんご存知の「C言語」が拡張されて「C++」になったように、「u」を「u++」にすることで、過去の自分を礎にしながら気持ちを新たに邁進していこうと考えました。記憶が定かではないですが、2015〜2016年ごろだったと思います。

下記の記事でも触れましたが、最近はありがたいことに勉強会などで「u++さんですか?」とお声がけいただくことも増え、「u++」と検索とGoogle検索した際にも自分のコンテンツが上位に来るようになりました。

upura.hatenablog.com

時おり質問されるのですが「u++」の読み方は特に決めていません。「C++」が「しーぷらぷら」「しーぷら」「しーぷらすぷらす」「しーぷらす」などと多様に呼ばれるような感じかなと思っています。

IDなどでは英数字のみで「+」記号が使えない場合が多いので「upura」という文字列を使う場合も多いです。そのため自分自身では「ゆーぷら」と読むことが多い気がします。

このアカウント名で失敗したと思うことは「エゴサがしづらい」です。検索クエリとして「+」記号が変な挙動をするためか「u++」で検索しても意図した結果を出てきません。とはいえ、無駄にエゴサで傷つく心配はないので、一長一短かなとも思いました。

最近は会社でも「u++」で言及されることがあり、完全に自分の第二の名前になっています。以上、これから「u++」の名でイベントに登壇するまでの待ち時間で書いてみました。

今後ともよろしくお願いします。

connpass.com

ブレインパッド「白金鉱業 Meetup Vol.4」に参加しました

11月29日、ブレインパッド主催の「白金鉱業 Meetup Vol.4」に参加しました。

brainpad-meetup.connpass.com

ブレインパッドが定期的に実施している勉強会の第4回で、今回から「Platinum Data Meetup」より名称変更しました。今回は発表が3件あり、特に自分も出展した技術書典の話が気になって参加しました。

  • 位置情報データをマーケティングに活用する時に気を付ける事
  • 技術書典のサークル座席配置最適化
  • マネージャーあるいはリーダーという仕事

以下では、各発表の感想を備忘録としてつらつらと書きたいと思います。

位置情報データをマーケティングに活用する時に気を付ける事

田村 潤さん / 株式会社ブレインパッド アナリティクスサービス部

位置情報を分析し、マーケティング施策に落とし込む取り組みについての紹介でした。

一番参考になると思ったのは「正解データ」の作り方でした。分析した結果の精度検証に当たって、例えば「実際にユーザがいつ・どこに・どのくらい滞在したか」の情報が必要になりますが、純粋な位置情報からは「正解データ」を得ることができません。

f:id:upura:20181201091223p:plain

そこでこの事例の場合は、顧客も巻き込み「実際に現場を歩く」ことで「正解データ」を作成したとのことです。質疑応答では「少なくとも数十単位のサンプルサイズが欲しい」とお話されていました。過度にデータの世界だけに閉じこもらず、現実世界と紐づけた枠で物事を考える大切さを改めて実感しました。

f:id:upura:20181201091731p:plain

位置情報からマーケティング施策に落とし込む上での注意点として「ユーザとの適度な距離感を保つ」ことを挙げられていました。この点は非常に重要だと思う一方で、ユーザの特性や時代によっても基準が変わるため、「適度な距離感」を測るのは難易度が高いようにも感じました。

ちょうどイベント前日に、下記のように言及しているYahoo!の記事を読んでいました。

よりユーザーのことを理解する「超理解」を用いればユーザーが気付いていないような利便性の高いサービスも提供できます。そうなると「気持ち悪い」を超え、「すごい!」に変わるのです。

about.yahoo.co.jp

つまりは「ITで物事がどんどん便利になる一方で、どういう仕組みなら好意的に受け入れられるか」ということで、個人的な興味・関心にも近い話でした。

今回の事例に限らず、より具体的に「こういう施策は受け入れられた」「こういう施策を打ったらユーザから苦情が来た」のような事例が聞けると参考になるなと思いました。後者のような失敗事例はなかなか世に出てこないのが悩ましいところです。

技術書典のサークル座席配置最適化

藤原 秀平さん / 株式会社メルペイ

過去にブログや『技術季報』でもまとめられていた題材で、今回は実際の試行錯誤を時系列に沿って赤裸々に語る内容でした。

blog.techbookfest.org

  • 解く問題の設計次第で計算量が発散する
  • 緩和解を許容すると、非現実的な解が算出される

など、現実世界の問題を数理最適化問題に落とし込む際の「あるある」が共有され、非常に興味深かったです。同時に「どこまでをコンピュータに解かせ、どこまでを人間が調整するか」という問題設計の時点での切り分けの重要さを実感しました。

数理最適化の効果としては「第4回で250サークルの配置たたき台を作るのに人間で丸2日」だったのが「500サークルで5分」になったそうです。コンピュータで作った配置たたき台を基に、浮いた時間で人間が質を上げていったとのことでした。

運営側としては、関連するサークルを近くに配置することで下記二つを期待しているとお話されていました。

  1. 来場者にとって便利に、また予期せぬ技術書との出会いを起きやすくする
  2. 出展者同士の横のつながりを作る(特に隣同士は結構喋るので、かなり意識して作ったそうです)

特に後者の出展者同士のコミュニティ醸成も意識しているとはあまり思っておらず、運営の方がかなり奥深くまで考えられてるのを、ひしひしと感じました。

マネージャーあるいはリーダーという仕事

紺谷 幸弘さん / 株式会社ブレインパッド アナリティクスサービス部

50人近くのデータアナリストを抱えるアナリティクスサービス部長の紺谷さんが、マネージャー側の仕事を志したきっかけやマネジメントの方針についてお話されました。

f:id:upura:20181201095459p:plain

50ページを超える発表資料で、過去の具体的な経験から始め、最後には「個々人のパフォーマンスにおける内的世界と外的世界のつながり」という抽象的な話にも言及されていました。データ分析という題材に限らず、マネジメントを考える上で参考になる普遍的な話だと思いました。

おわりに

今回は参加した「白金鉱業 Meetup Vol.4」について、発表3件の雑感をまとめました。懇親会などでTwitterのフォロワーさんら含め多くのデータアナリストの方と交流もでき、有益な時間を過ごせました。運営のブレインパッドさん、ありがとうございました。

【Mac, 2018】Go実行環境の構築 (goenv, vscode)

環境

Go実行環境の構築

goenv

brew install goenv

.zshrc の設定

# goenv
export PATH="$HOME/.goenv/bin:$PATH"
eval "$(goenv init -)"

# go
export GOPATH=$HOME/.go
PATH=$PATH:$GOPATH/bin

設定反映

source ~/.zshrc

Goのインストール

インストール可能なバージョン確認

goenv install -l

インストールと設定

goenv install 1.10.0
goenv global 1.10.0

設定確認

goenv versions

Visual Studio Code の設定

拡張機能「Go」を設定

Hello Worldをするべく、hello.go を作成して以下をコピペ。

package main

import "fmt"

func main() {
  fmt.Printf("Hello world\n")
}

以下が推奨されたので、インストールしておく。

Installing 10 tools at /Users/xxxxxxxxxxxxxx/go/bin
  gocode
  gopkgs
  go-outline
  go-symbols
  guru
  gorename
  dlv
  godef
  goreturns
  golint

Installing github.com/mdempsky/gocode SUCCEEDED
Installing github.com/uudashr/gopkgs/cmd/gopkgs SUCCEEDED
Installing github.com/ramya-rao-a/go-outline SUCCEEDED
Installing github.com/acroca/go-symbols SUCCEEDED
Installing golang.org/x/tools/cmd/guru SUCCEEDED
Installing golang.org/x/tools/cmd/gorename SUCCEEDED
Installing github.com/derekparker/delve/cmd/dlv SUCCEEDED
Installing github.com/rogpeppe/godef SUCCEEDED
Installing github.com/sqs/goreturns SUCCEEDED
Installing golang.org/x/lint/golint SUCCEEDED

All tools successfully installed. You're ready to Go :).

実行

go run hello.go
Hello world

f:id:upura:20181118175458p:plain

【論文メモ】不均衡データの「頑健な」クラスタリングによる教師なしの異常検知

RDEC: Integrating Regularization into Deep Embedded Clustering for Imbalanced Datasets

f:id:upura:20181118153018p:plain

論文リンク

proceedings.mlr.press

プレスリリース

東芝:ニュースリリース (2018-11-14):教師なしで少量の不良品データを高精度に分類する深層学習技術を開発

著者/所属機関

Yaling Tao, Kentaro Takagi, Kouta Nakata / TOSHIBA

媒体

Proceedings of The 10th Asian Conference on Machine Learning, PMLR 95:49-64, 2018.

先行研究と比べてどこがすごい?

  • 実アプリケーションで一般的に発生する不均衡なデータの問題に焦点を絞った研究はほとんどなかった

技術や手法のキモはどこ?

  • ネットワーク正則化手法「virtual adversarial training (VAT)」と、クラスタリング手法「deep embedding clustering (DEC)」を統合

virtual adversarial training (VAT)

musyoku.github.io

提案手法(以下VAT)は、予測分布p(y∣x)を最も狂わすノイズr{v−adv}を計算により求め、p(y∣x+r{v−adv})をp(y∣x)に近づけることでモデルの頑健性を高める手法です。

データxから求まる予測分布p(y∣x,θ)と、ノイズrを加えたデータx+rから求まる予測分布p(y∣x+r,θ)に対し、両者のKL距離を最小化します。

qiita.com

各学習データ周辺における事後確率の分布を滑らかにすることでネットワークの汎化性能を向上させる手法です。Virtual Adversarial TrainingはAdversarial Trainingから派生した手法で、学習データの正解ラベルから計算した損失の代わりに事後確率同士の距離から計算した損失を用いることでラベルなしのデータも学習に活用する事ができます。

deep embedding clustering (DEC)

shunk031.me

高次元で規模の大きいデータセットに対しても効率的にクラスタリングできるよう特徴量を学習する

論文内での指摘

but it is sometimes sensitive to the initial location of centroids, especially in the case of imbalanced data, where the minor class has less chance to be assigned a good centroid.

  • RDECは、VATによる正規化を導入して、データの局所性に対するモデルの堅牢性を保証
  • VATは元の空間上で似ているデータを潜在空間上で近づけ、少数クラスのデータをまとめて分類を容易にする

どうやって有効だと検証した?

  • 均衡データ・不均衡データの両方でState-of-the-artのパフォーマンスを達成

議論はある?

VATや各ハイパーパラメータの効果を検証している

次に読むべき論文は?

virtual adversarial training (VAT)

[1507.00677] Distributional Smoothing with Virtual Adversarial Training

deep embedding clustering (DEC)

[1511.06335] Unsupervised Deep Embedding for Clustering Analysis

GitHub

github.com

【論文メモ】非専門家向けの調査に基づく、インタラクティブな機械学習ツールの設計

Grounding Interactive Machine Learning Tool Design in How Non-Experts Actually Build Models

  • Machine Learning (ML)の「非専門家」が実際にMLソリューションを構築する方法を調査
  • 非専門家特有の可能性と、陥りやすい落とし穴が明らかになった
    • 例えば、accuracyがパフォーマンスの単一の尺度として認識され、問題あるモデルがデプロイされた
  • 調査結果から、初心者向けのMLツールを設計する上では簡便性だけでなくロバスト性も同様に重要な目標だと示唆された
  • 非専門家がロバスト性のあるソリューションを容易に構築できるよう促すための設計理論を作成した

f:id:upura:20181117231650p:plain

論文リンク

https://www.microsoft.com/en-us/research/publication/grounding-interactive-machine-learning-tool-design-non-experts-actually-build-models/

著者/所属機関

Qian Yang, Jina Suh, Nan-Chen Chen, Gonzalo Ramos

媒体

Proceeding of the 2018 Designing of Interactive Systems Conference

投稿日付

June 2018

所感

Twitterでおすすめされていたのを見かけて読んでみました。

機械学習の非専門家に対する調査を実施し、陥りやすいミスを特定
→ そのミスに対応するための設計理論を提唱

という流れで、プロジェクトを進める上でのお手本のような論文でした。

論文の前半では調査から得られた知見として「非専門家あるある」がまとめられています。

例えばFigure 2では、非専門家が機械学習を過度にブラックボックスだと捉え「入力Xがあれば、機械学習が出力Yを返す」以上の理解をしていない場合があると指摘しています。

f:id:upura:20181117232946p:plain

ノイズや欠損値の処理や特徴量エンジニアリング、アルゴリズム選定などの試行錯誤を疎かにし、またaccuracyを単一のパフォーマンス評価指標と捉えてしまう点などに言及があります。(Figure 3)

f:id:upura:20181117233753p:plain

確かに、既存の機械学習ツールは利便性が上昇している一方で「裏側で何が起きているか意識しない」という弊害を生んでいるようにも思います。本研究では「初心者向けのMLツールを設計する上では簡便性だけでなくロバスト性も同様に大切」とし、ロバスト性のあるソリューションを容易に構築できるような、インタラクティブな設計理論が提唱されました。

ここでいう「ロバスト性」というのは、Figure 4(b)に示すように

専門家が(ある程度当然に)実施している機械学習のモデル構築の流れを補助してあげることで、偶然の結果ではなく再現性ある結果として評価しよう

という意味だと捉えています。

如何にして機械学習を世に広めていくか考えられており、非常にMicrosoftらしい論文だと思いました。

GitHub

github.com

Rを用いて般若心経を感情分析してみた

はじめに

本記事は、hiro.is(@youjo_DS)さんの以下のブログを読んで着想を得ました。

loveshome.hatenablog.jp

感情分析とは

感情分析とは、その名の通り単語や文章内の「感情」を分析する手法です。事前に単語ごとに[-1, 1]で感情に値を付けた辞書を用意しておきます。値が正に大きいほどポジティブ、負に大きいほどネガティブな感情を意味します。文章の場合は単純に足し合わせで「文章としての値」を算出しているようです。

 head(dic)
#        V1       V2     V3       V4
#1   優れる すぐれる   動詞 1.000000
#2     良い     よい 形容詞 0.999995
#3     喜ぶ よろこぶ   動詞 0.999979
#4   褒める   ほめる   動詞 0.999979
#5 めでたい めでたい 形容詞 0.999645
#6     賢い かしこい 形容詞 0.999486

上記の例は、下記の記事から引用しました。

qiita.com

Rのパッケージ

下記のスライドを読んで SentimentAnalysis パッケージで、英語ならば文単位の感情分析が可能だと知りました。

www.slideshare.net

パッケージの詳細は下記の記事が詳しかったです。

https://cran.r-project.org/web/packages/SentimentAnalysis/vignettes/SentimentAnalysis.html

般若心経を感情分析

いくつかの題材で感情分析を実施した結果、「般若心経」で興味深い結果が得られました。

般若心経 - Wikipedia

データの準備

SentimentAnalysis パッケージでは日本語を扱えないため、英語訳を利用します。「heart sutra japanese」でグーグル検索して一番上に来たサイトから英語訳を利用しました。文章が長い場合には、適宜2文以上に分割しています。

www.holymtn.com

documents <- c(
  "When Avalokitesvara Bodhisattva is practising the profound Prajna-paramita.", 
  "He sees and illuminates to the emptiness of the five skandhas", 
  "Thus attains deliverance from all suffering.", 
  "Sariputra, matter is not different from emptiness",
  "Emptiness is not different from matter.",
  "Matter is emptiness and emptiness is matter.",
  "So too are sensation, recognition, volition and consciousness.",
  "Sariputra, the emptiness character of all dharmas, neither arises nor ceases, is neither pure nor impure, and neither increases nor decreases.",
  "Therefore, in emptiness: there is no matter, no sensation, recognition, volition or consciousness, no eye, ear, nose, tongue, body, or mind, no sight, sound, scent, taste, tangibles, or dharma, no field of the eye up to no field of mental consciousness, no suffering, no cause of suffering, no ending of suffering, and no path, no wisdom and also no attainment.",
  "Because there is nothing obtainable.",
  "Bodhisattvas through the reliance on Prajna-paramita have no attachment and hindrance in their minds.",
  "Because there is no more attachment and hindrance.",
  "There is no more fear.",
  "Far away from erroneous views and wishful-thinking, Ultimately : The Final Nirvana.",
  "Therefore, realize that Prajna-paramita is the great wondrous mantra, the great radiant mantra, the unsurpassed mantra, and the unequalled mantra.",
  "It can eradicate all suffering, and It is genuine and not false.",
  "Therefore, utter the Prajna-paramita mantra.",
  "Chant: Gate Gate Paragate Parasamgate Bodhisvaha!"
)

分析結果

以下のように、感情分析を実行できます。

library("SentimentAnalysis")

# Analyze sentiment
sentiment <- analyzeSentiment(documents)

# Extract dictionary-based sentiment according to the QDAP dictionary
sentiment$SentimentQDAP
 [1]  0.20000000  0.00000000 -0.25000000 -0.25000000 -0.33333333 -0.50000000  0.25000000
 [8] -0.07692308 -0.03030303  0.50000000 -0.16666667 -0.50000000 -1.00000000 -0.12500000
[15]  0.38461538 -0.20000000 -0.25000000  0.00000000

ネガティブな文、ニュートラルな文、ポジティブな文がそれぞれ8、5、5個ありました。

table(convertToDirection(sentiment$SentimentGI))
negative  neutral positive 
       8        5        5 

文を時系列順に並び替えた結果をプロットしてみます。

plot(sentiment$SentimentQDAP, type="l")

f:id:upura:20181024062842p:plain

感情の起伏が起承転結に対応していることが読み取れます。お経と言うと一般に「単調」「つまらない」みたいな印象がありますが、感情分析を実行してみると振れが激しい文章だと分かりました。

おわりに

今回は、Rを用いて般若心経を感情分析してみた結果を共有しました。般若心経は感情の起伏が起承転結に対応しており、じっくり読んでみると意外と趣深い文章です。分量も少ないですし、本記事で少しでも興味を持った方は、ぜひご一読してみてください。検索すると現代語訳もたくさん出てきます。

Rスクリプトは下記で公開しています。

github.com

また般若心経はじめ仏教については、下記の本がおすすめです。

http://amzn.asia/d/1ccc1Xmamzn.asia