tkm2261's blog

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

米国CS修士合格から渡米までの手続き諸々

こんにちは、tkmです。

今回は合格後からやったやったことを書いておきます。

UCIに限定される事も多そうですが、そもそもこの辺の資料がネットに無かったので色々残しておきます。

私もTwitter経由なので色々な方から教えてもらって何とか渡米直前までこれたので、あとに続く方々が楽になれば幸いです。

Statement of Intent to Register (SIR) の提出

合格メールと一緒にSIRの案内が来ます。Statementって付いてるとビビりますが、

入学する場合はaccpetにチェック入れて提出するだけです。

Statement of Legal Residence (SLR) の提出

これは多分カリフォルニア州だけっぽいですが、居住者かどうかの審査に使われるようです。

[授業のための居住者]は、普通に言われる居住者と定義が若干異なるらしく質問にいっぱい答えます。

よくわかってないで授業料の安い居住者を希望しましたが、もちろん認められず非居住者の授業料が請求されました。

l-20ドキュメントの提出

l-20は入学許可証と呼ばれるもので、大学にl-20ドキュメントを提出すると送られてきます。

これが無いと学生ビザの取得ができないので急いで提出しましょう。

実際のUCIの書類のフォーマットが↓です。

https://ic.uci.edu/forms/NewGradStudent-StudentForm2018.pdf

1年分授業料+生活費の残高証明

申請書類の他にl-20の取得にはパスポートと1年分授業料+生活費の残高証明の2つの資料を提出する必要があります。

必要な額は学部や年によって違いますが、私の場合はGRADUATE (STANDARD)なので$52,433を用意する必要がありました。

f:id:tkm2261:20180822163437p:plain

全て現金である必要はなく、奨学金とかを貰えている場合はそちらでも大丈夫です。

f:id:tkm2261:20180822163650p:plain

残高証明は銀行に行って『英語の残高証明下さい。』といえば1週間ぐらいでもらえます。私の場合は三菱UFJ銀行でした。

為替レートは変動するので預金額に余裕を持って取得しましょう。

あとこの残高証明書はビザ面接でも要求されるので捨てずにとって置きましょう。

l-20の配送手配

l-20ドキュメントの提出自体はネットでできますが、

送られてくるl-20自体はPDFではなく直筆のサイン入りの書類なので、国際郵便で受け取る必要があります。

この辺は大学によって変わりそうですが、UCIの場合はeShipGlobalというサイトで登録して、そのIDを書類提出時に記載して配送を手配しました。

https://study.eshipglobal.com/

学生(F-1)ビザ取得

l-20の書類を受け取ったらビザの取得をします。特別な事がなければF-1ビザだと思います。

↓のサイトを参考にすれば特に問題なく取得できると思います。

米国ビザ申請 | 学生ビザ - 日本 (日本語)

非移民ビザ申請書(DS-160)の記載

これもこの記事に従って記載すれば特に問題ないと思いますが、結構長いので余裕を持ってやると良いです。

あと数分記載がないとセッションが終わってしまうのですが、再開には最初に表示されるIDが無いと再開出来ないので、必ず控えておきましょう。私は3回ぐらい同じ事を書く羽目になりました。

米国ビザ申請 | DS-160 情報 - 日本 (日本語)

注意点としては一番最後に親族以外の身元保証を2人記載する必要があるので予め依頼をしておきましょう。

とくに米国大使館から連絡とかは行かないです。(変なことをしなければ。。。)

SEVIS費用の支払

ここで支払って、最後に表示されるI-901 SEVIS費確認書を印刷して持っていく必要があります。

SEVIS費用について | 在日米国大使館・領事館

5cm x 5cmの写真用意

5cm x 5cmが出せる証明写真機は少ないので探しておきましょう。確か司法書士用のやつが5cm x 5cmだったはずです。

(あれば)過去10年間に発行された古いパスポート

一応書いてありますが、なくてもいけます。

私も見つからずに持っていきませんでしたが、確認すらされませんでした。

ビザ面接

ここで面接の予約と申請費用の支払をします。

https://cgifederal.secure.force.com/?language=Japanese&Country=Japan

面接の内容については言っちゃいけない気がするので詳細は書きませんが、私の場合は5分ぐらいで終わったので緊張せずに行きましょう。

あと諸先輩方に頂いたアドバイスとして、『米国で働きたいとは言わないほうがよい』というのがありました。

学生ビザは学外での就労が禁止されているのと、その後の就労ビザが取れるとは限らないので、将来違法就労するかもと疑われて良くないようです。

TA/RAやインターンをやるつもりでも、お金のことを聞かれたら変なことを言わずに『親に借ります。』というのが良いようです。(まるっきり嘘は駄目ですが)

あと、残高証明書やここまで使った書類は全て持っていったほうが無難です。人によってはCVを要求されたという噂も聞きましたが私は求められませんでした。

面接が終わるとパスポートは回収されて、その後ビザが添付された形で自宅に郵送されてきます。

家探し

UCIではPh.D.学生は学内寮 (On-Campus housing)が基本保証されており、ここから申し込むと部屋を借りることができます。基本的にシェアルームなので予算応じてシェア人数や間取りを 選ぶと良いです

https://housing.uci.edu/apply/How_To_Apply.html

ただ私の場合はMasterなのと合格を貰ったのが遅い時期だったのでwaiting listに載ったまま学内寮に入ることは出来ませんでした。

学外の部屋を借りる

UCIの場合はOff-Campus Housing Networkなるものが整備されており、そこから部屋を借りることが出来ました。

https://offcampus.housing.uci.edu/

ログインすると部屋の検索とルームメイト募集の掲示板にアクセス出来ます。

基本的にルームメイト募集しているところで借りるほうが安いですが、ルームメイトがいなくなった時に自分が探す側にならないと行けないのが面倒で普通に大家から借りました。

私の場合は、private bedroomの確保を最優先にした結果、キッチンなし大学から5kmバストイレ共用で月700ドルの部屋を借りることになりました。

契約と家賃の支払

家の契約には12 month leaseやMonth-to-Monthなどがあり。12 month leaseとかでも30日前(契約による)とかに通告すると出ていく事が出来ます。12ヶ月は追い出されないということですね。

あとは部屋を又貸しするsubletとかもあるので、安いからといって安易に契約すると契約通りにMove-out dayで追い出されるので注意しましょう。

契約が成立すると、大体の場合にデポジット家賃1ヶ月分+入居月家賃+退去月家賃の合計3ヶ月分のお金を支払います。

米国だと銀行振込の手数料が高く、VenmoやPayPalでの支払が多いようです。Venmoは米国の銀行口座が必要なので、私はPayPalをとりあえず使っています。

予防接種

入学が近づくと恐らく予防接種の履歴の提出が求められます。

UCIの場合は最初の秋学期は予防接種が全て打ててなくても履修できるのですが、冬学期の履修登録が出来なくなるので日本で予め受けていったほうが無難です。

一緒に打てるワクチンもありますが、ものによっては4週間空けないる必要があるので、最低でも渡米2ヶ月前には母子手帳を持って医者に行ったほうが良いです。

あと米国は麻疹風疹には厳しいようなので、合格が決まった瞬間に麻疹風疹は受けてしまっても良さそうです。

f:id:tkm2261:20180822173911p:plain

日本で間に合わなくても米国で受けることもできます。米国だと医療費が怖いところですが、学生は大学の医療保険に普通は入るのでそこまで高くないようです。

f:id:tkm2261:20180822174246p:plain

予防接種は日本でも保険外なのでこんなもんですね。

履修登録

ここは大学によりますが、大体6月ぐらいから秋学期の履修登録が始まるので早めに履修登録しましょう。

人気授業は結構すぐ埋まります。

TA/RAの申込

7月ぐらいにメールが来て希望する学生は登録をします

UCIの場合はTAはTOEFL speaking 26点以上 or 大学の英語のテストに受かる必要があるので日本からの留学生は出来ない場合が多そうです。

そのかわりReaderと呼ばれる採点とかのRAはできるみたいで、Ph.D.の学生はこの仕事が保証されているようです。

だいたい月1,000ドルぐらいの仕事のようなので、お金の無いMasterの私でも出来ることを祈っています。

とりあえずSkillのところにKaggle Masterと書いておきました。

授業料の支払

ここも大学によるでしょうが、UCIだとinternational paymentはここから払えと案内されました。

WU GlobalPay

記載していって最後に出てくるPDFを銀行に持っていくと支払ができるようです。

UCIの場合は9/17が支払期限だったので余裕をもって支払いましょう。

新入生オリエンテーションへの参加

最初の大学行事として、9/20に設定されてました。これも年や大学によって全然違いそうです。

これに間に合うように渡米すれば良さそうです。

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

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

こんにちは、tkmです。

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

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

www.youtube.com