見出し画像

海外就職: シンガポールでデータサイエンティストとして働くまでの話


シンガポールに来た経緯、Resume、OSS、Kaggle、(コーディング)面接対策、給与交渉体験、就労ビザについて、以下の方向けに書きます。

・ 外資系企業との英語面接を控えている方

・ 海外、特にシンガポールでの就職に興味がある方

・ データサイエンティスト、MLエンジニア、ソフトウェアエンジニアとしてのキャリアに興味がある方

前置き


・ こちらの記事は全文無料で公開していますが、最後にお願いがあります。

・ 技術的な内容を含みますが、その部分は読み飛ばしていただいても問題ありません。

・ あくまでも一個人の体験に基づきますので、参考にされるかどうは自己判断でお願いします。


シンガポールに来た経緯


私は2010年1月にエンジニアとして東京で働きはじめ、主に製造、自動車業界向けのセンサーデータ処理、解析、シミュレーション、コンピュータビジョンといったアプリケーションに携わっていました。
2015年9月に転職して、社内ではコンサルタント、クライントからはデータサイエンティストと呼ばれるポジションで、クライントから受注したデータサイエンスプロジェクトを担当していました。

2016年4月にシンガポールオフィスに1週間出張することになり、初めてシンガポールに来ました。
その時に、資源がない中で急速に発展したシンガポールという都市国家の成功を目の当たりにしました。

帰国後、衰退し始めている日本市場だけで勝負するのはリスクではないかと考え始め、シンガポールの以下のメリットを考慮して、シンガポールでキャリアを積むことにしました。

・ 多くのグローバル企業のアジア太平洋リジョン(日本を含む)の拠点が置かれるようになっている。

・ 英語で生活できる。

・ 就労ビザ(EP: Employment Pass)は抽選無しで通年応募可能で、年々要求水準が高くなってきているものの、アメリカよりは取りやすい。(アメリカのH-1Bビザは抽選制で4月募集・10月開始という制限があり、O-1Aビザは抽選無しで通年応募可能ですが"extraordinary ability"があることを証明する必要があります。)

・ 治安が良い。

・ 交通、特に地下鉄が整備されていて、車無しでの生活に困らない。

・ 教育、研究水準が高い。

・ 体感温度で、東京の真夏(7~8月)ほど暑くなく、年中過ごしやすい。


また、次は社内にデータを持っている事業会社でキャリアを積みたいと思い始めていたので、日本からシンガポールへの異動ではなく、シンガポール現地でデータサイエンティストの仕事を探すことにしました。

ただ、(日本でも近い状況かと思いますが)多くの企業のデータサイエンティストのポジションは最低でも関連する修士号が必須、できれば博士号保有者希望のところが多く、自分のように化学の学士号のみの場合には相当の経歴でないと厳しそうでした。

そこで、シンガポールでデータサイエンスの修士号を取得して、その後でシンガポールで就職活動をすることにしました。

こうして、2017年6月に退職し、7月にシンガポールに引っ越して、8月にSingapore Management University の Master of Information Technology in Business の修士プログラムに入学しました。

私が応募した時に参照したわけではなく、ランキングにどれくらい意味があるのかという議論もありますが、こちらの修士プログラムは QS World University Rankings: Masters in Business Analytics Rankings 2020 では世界ランク14位と評価されています。

英語圏向けの就職準備


修士プログラム卒業前の2018年秋頃から、就職活動の前準備を始めました。

・ Resumeを継続的にアップデート。

・ 面接で想定される質問への回答(過去に成果を出せたエピソード等)をPowerPointスライドにまとめる。

Linkedinプロファイルを継続的にアップデート。

・ 求人サイト(Monster, Glassdoor, JobStreet)に登録。

・ リクルーティングエージェントに相談。

・ Skype・Zoom面接用のヘッドセットを購入。

・ Machine Learning用のPythonパッケージを開発してGitHubで公開。

Resumeの書き方については、次のYouTube動画で 説明されているGoogle社推奨のスタイルを参照しました。(Google社に応募したわけではありません。)

・ Google's Virtual Career Fair: Resume Tips
https://www.youtube.com/watch?v=yrtScvSzmk0

・ Create Your Resume for Google: Tips and Advice https://www.youtube.com/watch?v=BYUy1yvjHxE

Googleスタイルでは、成果は "Accomplished [X] as measured by [Y] by doing [Z]" という形式で書きます。
Resumeには仕事や大学院での成果だけでなく、後述するとおりOSSへの貢献やKaggleでの成果を含めました。

Resumeは非公開のGitHubリポジトリで管理していました。
プログラミングをされない方でも、Resume等の文章を非公開のGitHubリポジトリで管理するのは便利なため、GitHubアカウントを作成されることをおすすめします。

文章をGitHubリポジトリで管理する手順は、例えばこちらに記事があります。

https://qiita.com/search?q=tag%3AGit+user%3Aktkraoichi

面接で想定される質問への回答は、STAR形式(Situation、Task、Action、Result)でPowerPointスライドにまとめました。
自分の場合、STARの4つは多すぎて頭に入りづらかったため、Situation と Task は一つにまとめて、Situation/Task → Action → Result の3つにまとめました。
このスライドは、各面接の直前に見て思い出すためにも使えますし、将来転職活動する際にも再利用できる資産となります。

こちらの資料はMBA受験生向けですが、面接についての部分は就職面接の準備のためにも参考になりました。

・ GMAT 650点と共に生きた男 ~ 低スコアからのLBS 合格 ~
http://kkinterface.co.jp/wp-content/uploads/2016/04/LBS_MBA_%E5%90%88%E6%A0%BC%E4%BD%93%E9%A8%93%E8%A8%98_TAKAMI_Ver1.7.pdf

こちらのようなブログもあります。

・ Amazonシアトル本社の英語面接対策のために僕がしたこと
https://honkiku.com/prepare-for-interview/

Resumeと面接準備の際の注意点ですが、Resumeは時系列(直近→過去)で書くことになっている一方、面接での自己紹介("Tell me about yourself", "Walk me through your resume")は、時系列(過去→直近)で話さないとわかりづらくなります。
Resumeは先に重要なこと(直近の成果)を書くことが重要で、面接ではわかりやすくストーリーで伝えることが重要、と考えると良いかと思います。

エピソード集ができたら、実際に声に出して練習しました。

一人で話すだけだと続かなかったので、英語音声からテキストに変換するアプリを面接官役として使いました。
Androidだと、Live TranscribeやOtterといった無料アプリがあります。
アプリに聞き取ってもらえない単語については、発声練習しました。

友人に面接官役をやってもらう模擬面接(Mock Interview)で練習もしましたが、やはり実際の面接をこなさないと面接がうまくならないというのも事実なので、志望度があまり高くない企業との面接を先にこなしておくようにしました。
話を聞いてみると意外とおもしろくて志望度が上がったりすることもありますので、企業にチャンスをあげるかわりに練習相手になってもらうと考えるといいかと思います。

2019年5月に修士プログラムを卒業して学生ビザ(Student Pass)の期限が切れる直前に、シンガポールの主要な大学(院)を卒業すると該当する就職活動用のスキーム(”Graduate from an Institute of Higher Learning Seeking Employment in Singapore”)により、1年間有効の長期滞在ビザ(Long-Term Visit Pass)に応募して、無事取得することができました。

OSS、Kaggleによるデータサイエンティスト、MLエンジニアとしてのポートフォリオ強化


2019年6月に、とある企業主催のコンペに参加したところ、不本意な結果に終わりました。
パラメータや処理方法を変えて実験する際に、毎回パイプライン全体を実行すると時間がかかってしまうため、データファイルがあるかどうかをチェックして、実行が必要な部分のパイプラインのみを実行するようにしたかったのですが、そのパイプラインの実装に時間をとられてしまい、実験自体に十分な時間をとれなかったのです。

今後データサイエンティストのポジションに応募すると、企業によってはData Science、Machine Learning関連の(ミニ)プロジェクトを課される場合があると、大学院の先輩達から聞いていました。
期限内に(複数の)プロジェクトをこなすには、その課題特有の実装、実験に集中できるように、一般的なパイプラインフレームワークを事前に使いこなせるようになっておく必要があると考えました。

そこで、パイプライン構築用のPythonパッケージについて調べたところ、Airflow、Luigi、Kedroの3つが見つかりました。
ただ、残念ながら私の要望を完全に満たすものはありませんでした。

実行が必要な部分のパイプラインのみを実行する機能はLuigiにはありましたが、KedroやAirflowにはありませんでした。
ソフトウェアエンジニアリングの観点から、タスク処理、ファイル読み書き、パイプライン依存関係定義の3つのコンポーネントを独立させたかったのですが、Kedroでのみ可能で、LuigiやAirflowではできませんでした。
KedroのGitHubリポジトリにてIssueとして上げてみましたが、却下されてしまいました。

そこで、Kedroのラッパーパッケージとして「PipelineX」を自作することにしました。
その後、より素早くパイプラインを組めるような工夫や、MLflow、PyTorch、Ignite、Pandas等とのインテグレーションを追加しました。

一方、今後のキャリアではDeep Learningを使用したいと考えていたため、Resumeや面接でアピールするためにDeep Learningで成果を出せそうなコンペをずっとモニタリングしていたのですが、当時開催されていたコンピュータビジョンのコンペだと、高価な高性能GPUを使えることがかなり有利となるようなものだったので、見送っていました。

そんな時、2019年10月にアメリカンフットボールの結果を予測するKaggle NFLコンペが始まりました。
Kaggle NFLコンペはテーブルデータだったのですが、プレーヤーの位置座標が含まれていたため、疎行列として画像テンソルを生成することができ、Deep Learningやコンピュータビジョンのテクニックを使えるのではないかと考えました。
また、Kaggleカーネル上で学習、推論させる必要があるカーネルコンペだったため、高性能GPUの有無は問題になりません。

そこで、PipelineXのプロトタイプを使用して、このKaggle NFLコンペにソロで参加し、最終的に2038チーム中42位に入ることができました。
作成したPythonコードは https://github.com/Minyus/kaggle_nfl で公開しています。

コーディング面接対策


当初は予定していなかったのですが、後述するB社でのオフィス面接ではホワイトボードでのコーディングテストがあるとのことだったので、1週間で準備しました。
以下のリソースを使いました。

書籍:エンジニアとして世界の最前線で働く選択肢 ~渡米・面接・転職・キャリアアップ・レイオフ対策までの実践ガイド

・LucidProgramming 氏によるData Structures in PythonのYouTubeプレイリスト
https://www.youtube.com/watch?v=lVFnq4zbs-g&list=PL5tcWHG-UPH112e7AN7C-fwDVPVrt0wpV

コーディング面接でPythonを使う場合にはおすすめです。

・How to: Work at Google — Example Coding/Engineering Interview
https://youtu.be/XKu_SEDAykw

・LeetCode
https://leetcode.com/

Easyレベルを 48問, Mediumレベルを 8問解きました。
データサイエンティストのポジションだと、ソフトウェアエンジニアほどの難しいコーディング試験が出ることはほとんどないと考え、難しい問題はスキップしました。

・Pramp
https://www.pramp.com/

コーディング面接では、話しながら考え、話しながら書くという、普段はあまり使わない特殊なスキルが必要になります。そのため、 Pramp で練習しました。
Pramp は練習相手とマッチングし、ビデオ通話で面接の練習ができる無料のサービスです。
同期されるテキストエディタも付いていますが、ホワイトボードでのコーディング面接に慣れるため、私はホワイトボードを使用して練習しました。
また、面接当日には、念の為ホワイトボード用マーカーを持参したところ、案の定現地のマーカーのインクが出にくい状態でしたので、役に立ちました。


ホワイトボードのセットアップ


コーディング面接がない場合でも、Skype/Zoomでの面接の際にはホワイトボードをセットアップしておくと、自分の過去のプロジェクトを説明する時に使用できて便利でしたので、おすすめです。
特に自分のように英語がネイティブでない場合には強力なTipだと思います。

私は 60 x 90cm のサイズのスタンド無しのホワイトボードを購入して、テーブルと壁で支えました。
プロジェクトの説明用途だと 60 x 90cm で十分かと思いますが、Prampでのコーディング面接練習用途だと文字を小さく書かないと厳しかったので、もう少し大きめのスタンド付きのホワイトボードを検討されてもいいかもしれません。

USB接続のウェブカメラを使用する場合には、向きを変えるだけで撮る対象を自分にするかホワイトボードにするかを切り替えられるかと思います。
ラップトップ付属のウェブカメラでホワイトボードを撮る場合には、ラップトップのディスプレイは見づらくなるので、私はデュアルディスプレイにしました。

画像2

画像1


採用プロセスの流れ


今回の就職活動では合計で20社ほどに応募しました。

LinkedinやMonster経由でメッセージをもらってResumeを送ったのが10社ほど、こちらからReferral(社員紹介)無しで応募したのが6社ほど、知人によるReferral有りが4社です。

こちらからReferral無しで応募した企業からは連絡はなく全滅で、Referral有りでも連絡無しが大半でした。

面接が決まれば、

・ Job Descriptionを熟読して、こちらからの質問を考えておく。

・ Linkedinで面接官を探して経歴をチェック。

・ GlassdoorのCompany Reviewsで過去の面接のレビューをチェック。

といった準備をしていました。

面接では、主に過去の仕事でのプロジェクト、修士プログラムでのDeep Learningコースプロジェクト、自作Pythonパッケージの「PipelineX」、Kaggle NFLコンペの話をしました。

以降では、最終的にオファーをもらった3社での採用プロセスについて書いていきます。

【A社での採用プロセス】

0.  2019年11月下旬に、A社の人事担当者からLinkedinでメッセージをもらう。

1.  人事担当者による電話(WhatsApp)でのスクリーニング

2.  Data ScienceチームマネージャーによるSkype面接

3.  コンピュータビジョンに関する課題プロジェクト(1週間)

自作のPipelineXパッケージを使用して素早く実験を回すことができました。作成したPythonコードは https://github.com/Minyus/pipelinex_image_processing で公開しています。

4.  Data Scienceチームマネージャーによる、Skypeでの課題プロジェクトのレビュー

5.  CIOとのSkype面接

6.  CTO, CIO, Hiring Managerとの最終オフィス面接

7.  メールでオファー


【B社での採用プロセス】

0.  2019年12月中旬に、B社に就職していた修士プログラムの元クラスメートにReferralを依頼

1. 人事担当者による電話スクリーニング

2. チームリーダーとのオフィス面接

3. チームマネージャーとのSkype面接

4. 応募したチームとは別のチームにて選考を進めたいと人事担当者から電話で連絡をもらう

5. 別のチームマネージャーとのSkype面接

6. Data Science部門ヘッドとのZoom面接

7. 人事担当者から電話で他社からのオファーについて確認される

8. メールでオファー

尚、B社での面接のほとんどがSkype/Zoom面接になったのは、某ウイルスの影響によるものと思われます。

【C社での採用プロセス】

0.  2020年1月下旬に、C社と契約しているリクルーティングエージェントから、Monster経由で連絡をもらう

1.  Founder、チームマネージャー、チームリーダーとのオフィス面接

2.  Founderとのオフィス面接

3.  メールでオファー

給与交渉体験

日本では給与交渉したことはありませんでしたが、今回初めて給与交渉してみました。
給与は、余裕のある生活を送る、自分や家族にもしもの時があったときのために貯蓄するといった目的だけでなく、シンガポールでの就労ビザや将来永住権に応募した場合の合否判断基準の一つになるからです。

給与交渉のために、参考になりそうなYouTube動画や書籍を探してみましたが、一番役立ったのはこちらでした。

・Salary Negotiation: 7 Tips On How To Negotiate A Higher Salary
https://www.youtube.com/watch?v=_PtKv7IXrBI


まず、2020年2月6日にA社からオファーをもらうことができ、承諾期限を1週間後に設定してもらいました。

A社での待遇をB社に伝えて電話で交渉したところ、幸いなことにA社より良い待遇で2月9日にオファーをもらえることができ、承諾期限を5日後に設定してもらいました。

B社での待遇をC社に伝えていたところ、2月12日にはC社からオファーをもらうことができましたが、B社ほどの待遇ではありませんでした。

また、B社での待遇をA社に伝えて電話(WhatsApp)で交渉してみましたが、その後連絡はなく、2月13日に再度確認したところ、オファーに変更はないとのことでした。

最終的には2月14日にB社からのオファーを承諾しました。

給与交渉についての書籍や記事には、1社目よりも良い待遇で2社目からオファーをもらったら、2社目の待遇を1社目に提示して増額してもらうように交渉する、と書かれているものがあり、試してみましたが今回はうまくいきませんでした。

原因の一つとして、期待する給与額を聞かれた際に控えめな金額を言ってしまったことが考えられます。

シンガポールの多くの企業に応募すると、私の経験上では、大抵期待する給与額を聞かれます。

その際、あまりに期待金額が高すぎるとオファーをもらえないのではという不安から、控えめな金額を返答していましたが、そうすると企業側は、期待金額を提示すれば承諾すると考えてしまい、その後で他の企業からのオファー額を連絡しても、すでに期待金額をオファー済みなので再検討するということは渋るようでした。

給与交渉を(ゲーム理論で定義されている)オークションと見れば、企業側は候補者の評価額の範囲内で競争相手よりも高い金額を入札するだけなのですが、実際には心理的な抵抗や、社内承認のコスト等の要因により、そうはならない経験をすることができました。

期待する給与額を聞かれた場合には

・金額は言わない。
例1: "I expect a competitive package reasonable for my qualification."
例2:"I'm open to negotiation after the final interview."

・金額を答えざるを得ない場合には金額を2つ答える。
例1:"I expect $YYY, but I will consider any reasonable salary higher than $XXX depending on the whole package."
例2:"The expected salary range is $XXX to $YYY."

というふうに返答しておいた上で、(採用プロセスのコントロールは難しいですが)第3希望の企業からオファーをもらって、その待遇を第2希望の企業に連絡してオファーをもらって、その待遇を第1希望の企業に連絡してオファーをもらう、という戦略を目指すのが良いのではないかと考えています。


シンガポールでの就労ビザについて

シンガポールで専門職・管理職のポジションで働くには、大抵 Employment Pass(EP) という就労ビザを取得することになります。(他にも就労ビザはありますが、ここでは割愛します。)

EPを申請する条件として、Fair Consideration Framework (https://www.mom.gov.sg/employment-practices/fair-consideration-framework) の規定により、(一部の例外を除いて)Jobs Bankというシンガポール政府公式の求人データベースに登録してから14日以上経過していて、かつ期限内もしくは期限後3ヶ月以内の求人である必要があります。(企業がEPを申請する際に、Jobs BankのJob Posting IDが必要になります。)


こちらにわかりやすい図があります。

https://www.mom.gov.sg/-/media/mom/documents/employment-practices/fair-consideration-framework/annex-b-administrative-details-under-fcf.pdf?la=en&hash=69816500CA16F999C008A477A1822351


Jobs Bankに投稿されている求人は https://www.mycareersfuture.sg/ で検索、閲覧することができます。
こちらでは期限切れの求人は見つかりませんが、“mycareersfuture.sg 会社名”でググれば、期限切れの求人が見つかることもあるようです。

EP申請に使えるJob Posting IDは期限内もしくは期限後3ヶ月以内のため、もし期限後3ヶ月を超えている場合にはせっかくオファーをもらっても企業がJobs Bankに投稿して14日間他の候補者も検討するのを待たないといけないことになりますので、早めに企業の人事担当者に確認しておくことをおすすめします。
Jobs Bankへ求人を投稿するために企業側に費用はかかりませんので、遠慮する必要はないはずです。

また、Jobs Bankでは、役職名、職務内容、Job Posting ID、期限日(Closing)の他、給与交渉する上で重要な給与レンジも確認できます。

企業がオファーする給与を決めるにあたってJobs Bankで競合企業の給与レンジを調べることもできますので、面接を受けている別の企業名を聞かれた場合に、具体的な企業名を答えるかどうかの判断材料にもなります。

EPの審査状況は、シンガポール政府のウェブページ(EP Online)で確認できます。(承認されると、StatusがPendingからApprovedに変わります。)

EPの審査は、申請書類(Form 8)には"It takes around 8 weeks to process the application."と書かれていますが、私の今回の申請は8日で承認してもらえました。


最後にお願い

Machine Learning、Deep Learingの実験用パイプラインを素早く構築するためのPythonパッケージ「PipelineX」 のGitHubリポジトリ( https://github.com/Minyus/pipelinex )が良さそうでしたら Star をいただけると嬉しいです。

SNSアカウント

twitter.com/Minyus86
linkedin.com/in/yusukeminami/
github.com/Minyus


この記事が気に入ったらサポートをしてみませんか?