tkm2261's blog

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

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に参加できるか分かりませんが、引き続き頑張って行こうと思います(・∀・)

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

こんにちは、tkmです。

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

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

www.youtube.com

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

こんにちは、tkmです。

今回は出願時結構混乱したGPA(Grade Point Average)について書いていきます。

米国ではGPAが超大事

米国では卒業するだけじゃなくてGPAを非常に重視します。大学院受験だけじゃなくて就活にも効いてくるので覚醒剤使ってでも勉強しているのはこれのためですね。

大学によってはminumum GPA を設定している場合があるので出願時に注意しましょう。

GPAが成績表に明示されていない大学は要注意

私が卒業した東工大は100点満点で60で単位が貰えるシステムでGPAは導入されていません。

私の学部のGPAは平均をとって84.2/100と記載します。分母がいくつかを右に書きます。

フォームで別に分母を書かせる場合もあるので指示にしたがってください。

GPAは色んな換算式がありますが、変な疑心暗鬼を起こさないために単純平均を使うのが無難です。

UC BerkeleyのようにGPA換算式のスプレッドシートを要求してくる大学もあります。

目次

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

こんにちは、tkmです。

今回は学費および出願にかかる費用について書いていきます。

出願費用

大体で見積もります。

項目 単価 回数 合計
TOEFL iBT $230 10回 $2,300
GRE $205 5回 $1,025
出願費用 $120 20校 $2,400
TOEFLスコア送付費用 $20 20校 $400
GREスコア送付費用 $27 20校 $540
合計 $6,665

1ドル107円換算で713,155円となるので。かなり高額ですね。。。

ただかなり多めに見積もっています。

TOEFLGREは早めにスコアが取れれば受験回数が減らせます。出願校も10校ぐらいにすれば半額です。

お財布と相談して受験戦略を決めましょう。

学費

基本的にPh.D.はお金を貰えるので、学費の心配はありません。

そのため修士の学費について見ていきましょう。

f:id:tkm2261:20180415071101p:plain

UC Irvineの場合、部屋代が入ってないので+$10,000ぐらいを考えると、440万円vs722万円

州立は安いものの、とても安いとは言えない値段ですね。

Research MasterにはTARAの口が結構あるみたいですが、最低1年ぐらいは学費を払う必要がありそうです。

国立大学の学費が年52万円の日本はホントに良い国ですね。

目次