tkm2261's blog

研究員(OR屋) → データ分析官 → MLエンジニア → ニートがデータ分析諸々書いてます

Avitoコンペ47位でした

Metricaの皆さんと参加したコンペですが、47位でフィニッシュでした。

勝敗はニューラルネットで別れたので、Deep Learning力を上げるのが急務ですね。。。

kaggle slackの過去ログ閲覧アプリをGAEで構築した話

こんにちは、tkmです。

今日は、kaggle slackの過去ログ閲覧アプリをGAEで構築したときのハマった点とかの話を書いていこうと思います。

kaggle slack過去ログ閲覧アプリ on GAE

https://kaggler-ja-slack-archive.appspot.com/

手前味噌だけど結構良いアプリになっていると思う。

チャンネル創立当初のログにまた逢えると思ってなかったので感慨深いですね。

Slackの無料枠では1万メッセージしか見れない

https://kaggler-ja.slack.com/intl/ja-jp/plans

1万件というのは多いようでかなり少ないです。Kaggle slackの場合6月末時点で5月までのログしか保存されていませんでした。

このままだと、kaggle slackではコンペ解法や質問回答という貴重な知見がロストしていってしまうので対策が急務でした。

Slack APIも過去1万件しか見れない

当たり前のようですが、APIで叩いても1万件しか取れません。また、誰がどのチャネルに入ったとかもメッセージとしてカウントされているようで、1万件が体感より少ない理由にも納得しました。

またAPIを使って、Google Spread Sheetにログを継続保存するのはかなり簡単で、

こちらのブログのコードをコピペするだけでOKです。

motemen.hatenablog.com

一応現在でも、Kaggler slackのコードはここに保存され続けています。

https://drive.google.com/drive/u/4/folders/17HBT50oa-Kow4127xhCwU0uEKrr33X90

Slack APIで見るべきデータ

SlackのAPIのページには様々なAPIがあり、一見メッセージログ収集に必要なデータがわかりずらいです。

Slack API | Slack

一応私が使ったAPIを列挙しておきます

何故かGUIでダウンロードすると、過去全てのメッセージが見れた!

get.slack.help

ここに従ってエクスポートすると、publicチャネルに限った話ですが、過去のメッセージを全て見ることが出来ました!

もともとKaggler slackはパブリックチャネルなのでこれで十分

最初はこれに気づかず意気消沈してましたが、結果全てのログを閲覧できるようになりました!

ただしUIでダウンロードしたログのタイムスタンプはintでmsecまで入ってません。

メッセージの差分管理をタイムスタンプでやってると、APIで来たメッセージはmsecまで入っているため、二重保存されるので注意してください。

お金もかけず運用も頑張りたくないのでGAEを選択

スプレッドシートでも最低限ログは見れましたが、やはり見づらい事この上ないためアプリを構築することに

次々来るログの差分管理が必要なためDBを導入したいが、

色々調べてもDB立てると高額になるし、運用手間的にインスタンス内に自分で立てたくない。。。

ということで、完全無料に組めるGAE+Datastoreで組むことに

Python2.7になるけどGAE Standardを選択

flexibleだと色々やりやすいが、大したことやらないので無料枠の多いStandardを選択

今回は開発しやすさよりも、運用負荷を優先

工数の9割はdatastoreに吸われた

GCPではCloud SQLといった普通のDBに無料枠はないが、datastoreには無料枠があり、

昔からGAE使ってる人にはお馴染みだと思います。

こいつはNoSQL的なDBで、インデックスをしっかり貼らないとクエリ自体が失敗する他、

ドキュメントも少なく仕様把握に時間がかかりました。

今回みたいな簡単なアプリにはいいですが、しっかりrelationをやるようなアプリでは大人しくCloud SQLとかを使ったほうが良さそうです。

WebフレームワークはFlaskを採用

個人的にはDjango派でしたが、ORマッパがdatastore独自になるので軽量かつGAEのサンプルコードが多いFlaskを採用しました。

コード見て頂ければわかりますが、ページ一個でGETだけ、パラメータもGETで渡すだけなのでかなり適当に書いてます。

UIを頑張ってslackに似せた

こういうアプリはUI悪いと敬遠されて使われないので、UIは可能な限りslackに似せて作りました。

f:id:tkm2261:20180705114143p:plain

https://kaggler-ja-slack-archive.appspot.com/

配色とかフォントはネットで「slack css」とかググって出てきた物を拝借して、

デザイン全体にはBootstrap4を採用しました。

昔みたいに「col-xs-3, col-md-3, ...」みたいに延々書く必要がなくなり、「col-3」だけで良いので大分書きやすくなっていました。

一応スマホでも見れるようにしてますが、専用の調整はしていません。

メッセージにリンクを付けた

実際に作ったアプリを使ってると、特定の発言を引用したいなーと思う事が多く

メッセージ上部に[link to this message]を追加した

f:id:tkm2261:20180705114927p:plain

元々datastoreの仕様上ページングの実装が面倒くさいことになっており、

ページの最初と最後のtimestampでページを表示していたので、表示したいメッセージのタイムスタンプをGETパラメータに渡すだけで実現できました。

便利な機能な割に、簡単に実装できてなにより

作成期間は2日

土日で作り上げましたが、元々Slackのログ仕様は目を通していたのと、

大体の設計が頭にあったので一回の週末だけで作れました。

ただこれは自分で全て決められたからなので、お仕事で受けるなら2~3ヶ月は取ると思います。

企業で開発を内製化したほうが良いのは、この辺りからも見えますね。

プルリク待ってます!

github.com

一番必要なのは検索機能で、GAEのsearch APIで実現しようと思ってます。

もしやってみたい方はプルリクお待ちしております!

BigQueryにデータをインポートする解説動画つくった

こんにちはtkmです。

今日はKaggleのデータをBigQueryに入れるまでを解説しました。

https://www.youtube.com/watch?v=LpLAKuQGRn8

題材は2018年5月時点で開催中のHome Credit Default Riskコンペです。

https://www.kaggle.com/c/home-credit-default-risk/

TalkingDataコンペでBigQuery周りの質問受けるのが多かったのと、他の所で解説する必要があったので動画にしてしまいました。

Kaggle Tokyo Meetup #4 開催レポート

こんにちは。tkm2261です。

今日は2018/5/12に開催したKaggle Tokyo Meetup #4の模様をレポートします。

connpass.com

このmeetupも4回目となり、今回はGoogle様からサポートを頂いた事もあり、かなり大規模なmeetupになりました。

今回からMaster枠とExpert枠を設けたり、Youtube Liveをしたり、人数を増やしたりと色々新しいことを試しています。

さらに自分で言うのもアレですが超豪華なスピーカーになっています。

最終的には参加者は70名程でYoutube Liveは1072回視聴されて、常時100人位以上が視聴していました。

ここまで来るとmeetup開催も責任が増してくるので、初めての方でも参加しやすいように内輪ネタを排除してなるべくpublicな開催を心がけて行きたいです。

開始前

今回はフード・ドリンク・会場・発表者交通費などをGoogle様にサポート頂きました。ありがとうございました!

会場は普段食堂として使われているところで、広々しており卓球や色んなモノがありました。

またYoutube Liveでの配信もサポート頂き、smly氏がスイッチャーを務めるという珍しい絵も撮れました。

f:id:tkm2261:20180514021131p:plain

私としては今回の配信でノウハウを盗もうとしてましたが、ガチすぎる機材に断念しました。

もちろん配信品質はとても安定していたのでとても助かりました。

Opening Talk

毎回おなじみのthreecourseさんによるopening talk

speakerdeck.com

配信付きでのopening talkは初めてらしく少し緊張気味でしたw

今回は人数が70名ほど多かったため、いつもやっていた自己紹介はしませんでした。

これについては今後運営で議論して存続を決めたい感じです。

発表① wataさん『サンタコンペで二度全完した話』

youtu.be

資料はこちら https://speakerdeck.com/wata_orz/santakonpedeer-du-quan-wan-sitahua

Kagglerが競プロ勢に恐れおののく年1イベントのサンタコンペに関する話でした。

開催後1日で全完した話とかは、会場をざわつかせるなど圧倒的な実力をいかんなく見せて頂きました。

会場はKagglerが多いことから最小費用流の話をわかりやすく話して頂いて助かりました。

会場でアンケートを取った所、大体会場の半分ぐらいが最小費用流を当日初めて聞いたという事でKagglerにも良い刺激になったようでした。

wataさんもあとsilver一つでKaggle Masterなので引き続きKaggleに参加してほしいです。

発表② pocketさん『猫でも取れる金メダル & 猫しか取れない金メダル』

youtu.be

資料はこちら https://www.slideshare.net/ShotaOkubo/neko-kin-96769953

pocketさんからは、RecruitコンペでGoldを取った時の話とKaggle初心者がどう始めれば良いかのお話でした。

やはり手元評価を確立することと、discussionを追うことの重要性を強調していました。

pocketさんは文系出身で2016年から初めてGoldメダルなので、Kaggleを初めたい方は動画を閲覧してみることをオススメします。

発表③ terekaさん『IEEE's Signal Processing Society 10th Solutionと得られた学び』

youtu.be

資料はこちら https://www.slideshare.net/ssuser21af5b/ieees-signal-processing-society-10th-solution

terekaさんは今回見事Gold獲得でMasterとなりました。

発表は画像コンペのモデルの話と、国際チームを組んだ時の苦労点や、ods.aiがクローリングしてデータを集めていたという闇コンペっぷりを共有頂きました。

やはりディープラーニングの人気からか、質問がかなり多かったです。

発表④ Davidさん『Using NumPy efficiently』

speakerdeck.com

※動画は公開可否を確認中

今回のメインスピーカーであるscikit-learnの生みの親であるDavidさんの発表です。

私がnumpyのマニアックな話を聞きたいという依頼もあり、かなり突っ込んだNumpy arrayの話をして頂きました。

個人的にはnumpy.arrayがstrideという属性を持っている事は知りませんでしたが、strideでviewや多次元配列に対応できたりと素晴らしいideaで、C++で行列演算書いた事ある人なら誰もがうなずく内容だったと思います。

broadcasting ruleも直感的に理解するのは難しかったですが、3つのシンプルなルールであのnumpyの演算が実現できてるのは美しいと言わざるを得ない内容でした。

今回、Davidさんは英語の発表でしたが、聴衆があまり英語得意でないということで、資料にかなり書き込んだそうです。普段はやらないとのことなので、彼には感謝しかありません。

LT

もはやLTの概念とは何かというほど、議論が活発なのもありLTも普通の発表並の時間となりました。

Jackさん

youtu.be

https://speakerdeck.com/rsakata/kaggle-meetup-number-4-lightning-talks

catboostやGBDTのカテゴリカル変数の扱いやtarget encoding (Likelihood encoding)の話です。GBDTを使う人は一度は見ておくべき内容です。

OsciiArtさん

youtu.be

https://www.slideshare.net/ssuser20fb43/kaggle-tokyo-meetup-4-lightning-talk-2018-data-science-bowl

DSB2018コンペの手法や2 stage制の闇について語って頂きました。Instance SegmentationのコンペはKaggleでDSB2018が初めてだったらしく手法についても今後押さえておくべき内容でした。

flowlightさん

youtu.be

https://www.slideshare.net/TakanoriHayashi3/talkingdata-adtracking-fraud-detection-challenge-1st-place-solution

TalkingDataコンペの覇者。以上説明不要!

というのは冗談ですが、動画内でかなり丁寧に手法を説明されているので、ご視聴をオススメします。

データサイズに対してnegative downsamplingと効率的に全列挙の特徴を作って試したことが勝因のようです。

懇親会

そのまま会場で、ビールとピザで懇親会をしました。

ドリンクとフードの手配もGoogle様が手配して頂き、インターン生の手伝いもあり、今までで一番運営していて疲れないmeetupになりました。コレに慣れると後が怖い。。。

飲んでる写真は取りそこねましたが、皆さん積極的に歓談しており自己紹介はなくても大丈夫だったとホッとしました。

さらに卓球などもおいてあり、一部の方は楽しまれていました。

最後に

今回は参加頂きありがとうございました!

非常に活発な議論でKaggleや仕事にすぐ生きる知見ばかりで開催して本当に良かったです。

当日の皆さんのツイートはこちらでも確認できます。

togetter.com

また、ご支援頂いたGoogle様ありがとうございました。

私も今回は司会に集中できて、つつがなく進行することができました。

個人的にはKaggle meetupはとても運営しやすい勉強会なので、留学してしまう予定ですが、今後も運営に関わって行ければと思います。

何か質問等あればTwitterKaggler slackで気軽にお声掛けお願いします。

TalkingDataコンペ11位でした

こんにちは、tkmです。

2018年5月に終わったTolkingDataコンペですが、11位でフィニッシュして一応ゴールドは取れました。

学費を稼ぐことを目指してやってましたが、入賞の壁は大きいですね。。。

一応KaggleのDiscussionにも解法を上げています。

https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56250

さらに自分の解法を解説した動画も今回は作っています。なんか最近はブログ書くより動画作るほうが楽になってきてます。w

留学資金を貯めるの関係であとどれだけKaggleに参加できるか分かりませんが、引き続き頑張って行こうと思います(・∀・)

米国大学院留学ご支援のお願い

こんにちは、tkmこと佐藤貴海(Sato, Takami)です。

本日は以前ご報告した米国大学院留学に際して、

ご祝儀を頂ける申し出を何人かの方から頂き、僭越ですが窓口を作らせて頂きました。

どんな形でもご支援頂けると嬉しいです!

一応行ってしまえばTA/RAで何とかなるっぽいですが、全然わからないのでご支援頂けると助かります!

留学先プログラムに関して

UC Irvine, the Donald Bren School of Information and Computer SciencesのMaster of Science degree in Computer Scienceのプログラムに2018年9月から留学予定です。

このプログラムはMaster of Scienceなので研究を目的としたMasterで、Ph.D.を目指していた自分としてもPh.D.進学を目指して入学をします。

Research MasterとProfessional (course) Masterの違いはこちらに載っています

MCS vs. MSCS | MCS ICS

Ph.D.進学を考えているので、なるべくMasterで借金をせずに卒業したいという考えを持っています。

いくらかかるのか

こちらで少し述べましたが、

コネなし論文なし英語苦手なアラサーのおっさんだけど米国CS大学院入学に頑張ったので全てを晒す ー お金編 - - tkm2261's blog

UCI University - Graduate/Credential Student Fees 2017-18によれば、

年間$32,433が授業料等でかかり、部屋代が年$10,000とすると、合計で$42,433

1ドル107円とすると年間4.540,331円となります。

修士課程は2年間なので約900万円が必要になります。

私の財務状況

Ph.D.で行くにしてもお金はかかるため多少は貯めており、

1年間は通える程度の貯蓄はあります。

奨学金について

これまで船井・伊藤国際・中島記念・平和中島・日本学生支援機構の各財団に応募して全て落ちています。

合格後に応募できる重田財団の奨学金にこれから応募予定です。

日本の留学奨学金の大半は学生であることが応募資格に入っており、選択肢が限られている状況です。

現地での稼ぎ

私はF-1ビザ(学生ビザ)で行く予定なので大学外での就労が禁止されています。

一応Reseach MasterなのでTA/RAが一応あるようですが、保証はされていません。さらに博士学生優先なのと初海外でいきなりTAは英語力的にも厳しいと考えており、初年度は計算できない状況です。

ただ2年目以降は米国では大体の学生が研究プロジェクトからお金を貰えるとの噂もあり、正直な所いってみないとわからないのが現状です。

ご支援の窓口

少し真面目な話をしましたが、どんな形でもご支援頂けると嬉しいのでお願いします!

Amazonギフト

https://www.amazon.co.jp/registry/wishlist/22IERFKB3JGKV/

こういう場合モノのほうが良いとは思いますが米国に持っていけないので、ギフト券にさせて下さい。日本法人のギフト券なので最悪換金して米国に持ち出します。

Amazon.comでのギフト券

もしAmazon.comでUSドルでギフト券を頂ける方いましたら、takamisato1113[at]gmail.com宛にお願いたします。

Amazon.com: Amazon.com eGift Card: Gift Cards

各種仮想通貨の投げ銭

仮想通貨で投げ銭頂ける場合はこちらにお願いたします。

個別のご支援

上記以外の方法で、ご支援頂ける方がいましたら

の佐藤貴海までご連絡頂ければ幸いです。

向こうでは死ぬほど忙しい事が予想されるので、お仕事をお受けすることは出来ませんが、

ブログやTwitterでのPRや、出国前や帰国時の講演については最大限強力させていただきます。

余ったご支援金について

もし万が一ご支援金が余るようなことがありましたら、Ph.D.卒業後に留学奨学金の財団のどこかに寄付を致します。

米国CS大学院の受験記事に解説動画作りました。

こんにちは、tkmです。

折角youtuberになったでの、記事だけじゃないくて解説動画も作ってみました。

留学考えている人のためになればと思います。

www.youtube.com