Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

【エンジニア列伝vol.8 もえ氏さん (3/4)】「Pythonは可読性が高く簡潔に書けるため、業務での使用に適しています」Pythonのメリットとおすすめの機械学習の勉強法について伺いました。

この記事は第8回Pythonエンジニア列伝の3記事目です

Pythonエンジニア列伝は、「Pythonエンジニアたちのインタビューを通して、Pythonを使う人達がどんな人なのか、Pythonをどんな場面で活用しているのか、なぜPythonに出会ったか」などを紐解く連載です。

連載はトピックごとになっているので、記事単体でも読むことができます。

f:id:kenken0326:20190624113209p:plain

関連記事・バックナンバー

データサイエンティストとしての業務内容

f:id:kenken0326:20190605105220p:plain
nana現在もえ氏さんは株式会社ブレインパッドでデータサイエンティストとしてお勤めされていますが、具体的にどのような業務に携わっているのでしょうか?
f:id:nana_yu:20190726112330j:plain

もえ氏主な担当は金融の分野です。機械学習に限らず、統計的なアプローチを使って解いています。
f:id:kenken0326:20190611102124p:plain

f:id:kenken0326:20190605105220p:plain
nana異業種で働く上で、これまでの業務内容とのギャップなどは感じませんでしたか?

もえ氏前職でも金融の機械学習案件を扱っていたため、業務内容に大きなギャップは感じていません。その反面、金融というジャンルが似ているというだけで、これまであまり解いてこなかったテーマを扱っているので、新鮮な気持ちで臨めています。
f:id:kenken0326:20190611102124p:plain

f:id:kenken0326:20190611102206p:plain
nanaでは、活動する場所を変えたことによって、変化したことはありますか?

もえ氏社内に、データで語り合えない人が居ないことですね。例えば前職で一人で機械学習案件に携わっていた頃は、データの分析に入るタイミングで「本当にばらつきを見ることが本質なんだっけ?」などと考えはじめ、一人で考えるしかないために、深みに嵌ることもありました。
f:id:kenken0326:20190611102124p:plain

知識の補完のために、コミュニティで他社の技術者と交流することもできます。とはいえ、会社内で相談できる人がいることはとても幸せだと思います。

もえ氏 そうですね、今ではそのような疑問が湧いたときには、「この分散を見る事が本当に本質なのか?」など、高いレベルでプロジェクトメンバーと話し合いながらブラッシュアップを図れます。やはり周りに仲間がいると心理的にとても楽ですし、数段上のレベルで仕事ができますね。
f:id:kenken0326:20190611102124p:plain

f:id:kenken0326:20190605175015p:plain
nao_y周りにしっかり勉強している仲間がいると、頼りになりますよね。切磋琢磨することで、自分のレベルも上がっていくのを実感できます。

データサイエンス業務でのプログラミング言語

R言語とPythonの特徴、業務での使い分け

f:id:kenken0326:20190605175015p:plain
nao_yここまで機械学習やデータサイエンスの話題に触れていましたが、業務でのPythonについてもお伺いしたいです。もえ氏さんは業務の中で、Pythonを活用されていますか?

もえ氏案件によりますが、Pythonを使うことが多いです。他にはR言語を使うこともあります。
f:id:kenken0326:20190611102124p:plain

R言語

オープンソースの統計解析向けのプログラミング言語・開発実行環境です。 URL:https://www.r-project.org/

f:id:kenken0326:20190605105220p:plain
nanaPythonもR言語も、機械学習や統計でよく使われる言語ですね。使い分ける基準はありますか?

もえ氏業務では案件の方針に従って使い分けています。私が現在担当している案件では、主にPythonを使っています。しかし、Pythonも万能ではありません。

例えば、一般化加法モデルはPythonとR言語の両方にライブラリがありますが、Pythonのライブラリは利用実績が少なく、実装に不安があります。このような場面では、分析の正確さを担保するためにR言語を使うことを考えます。

このように、それぞれの言語の強みを上手く活用するのが使い分けのコツですね。

f:id:kenken0326:20190611102124p:plain

f:id:kenken0326:20190605175015p:plain
nao_y「R言語の方がモデルが多い」「R言語にしかないマニアックなモデルがある」などの声は聞いたことがあります。

もえ氏R言語の強みは統計の専門家が作っているところで、弱みは統計の専門家が作っているところです(笑)

統計の専門家の手で作られているために、扱いやすさを強みとする言語に比べるとユーザビリティに劣る面がありますが、専門家が作っているため、モデルの実装を信頼できます。

f:id:kenken0326:20190611102124p:plain

機械学習業務でPythonを使うメリット

f:id:kenken0326:20190611102206p:plain
nanaRが専門家による専門家のための言語、ということは、Pythonを機械学習プロジェクトで使うメリットや魅力は、やはり扱いやすさにあるのでしょうか。

もえ氏そうですね。まず、Pythonは機械学習でモデリングを行う際のデファクトスタンダードです。そのため、機械学習を含むデータ分析を行う際には第一選択肢になります。

加えて、Pythonは可読性が高く簡潔に書けるので、業務での使用に適しています。

f:id:kenken0326:20190611102124p:plain

f:id:kenken0326:20190611102206p:plain
nana学習中の私などは、プログラムを書ける人なら読みにくくても読めるのではないか、と勝手なイメージを持ってしまうのですが。プログラムとして可読性が高いと、仕事の効率は上がりますか?

もえ氏可読性が高いコードの方が圧倒的に作業効率が上がります。私自身も無駄な記述を書かないように、Pandasなどでも1行で書ける処理は極力1行で書いています。

逆にそれで読みにくくなったりもすることもあるのですが…(笑)

f:id:kenken0326:20190611102124p:plain

f:id:kenken0326:20190605175015p:plain
nao_yわかります、一行で書くことにこだわった結果、メソッドなどを連結しすぎて読みづらいコードを書いてしまったことがあります。

もえ氏DataFrameをloc()でくくって、それをIndexに突っ込んで、またそれをさらにvaluesにして、みたいなやつですよね(笑)
f:id:kenken0326:20190611102124p:plain
f:id:nana_yu:20190726112612j:plain
f:id:kenken0326:20190606221846p:plain
susumuisどうだ!みたいなコードだよね(笑)

もえ氏 このようなコードになると反対に可読性を損ないます。

私としては、まったく知らないコードを読んでもプログラムの意図をコードから解読できる、そういったコードを書けるように心がけています。

f:id:kenken0326:20190611102124p:plain

短期間で高いレベルまで到達する独学のコツ

Pythonを学び始めたきっかけ

f:id:kenken0326:20190605175015p:plain
nao_y学ぶことに積極的なもえ氏さんですが、Pythonについてはどんなきっかけで学習しようと思ったのですか?

もえ氏私の場合は、Pythonを学ぶきっかけも機械学習ですね。機械学習のモデリングのために学習を始めました。
f:id:kenken0326:20190611102124p:plain

f:id:kenken0326:20190605175015p:plain
nao_yこれまで、他言語の業務経験などはありましたか?

もえ氏プログラミングはCC++ を学習していて、基本情報技術者の資格を取った際にアセンブラも多少学んでいました。しかし、これまでのキャリアは、コードを書くことを主とするものではありませんでした。

メインでコードを書く仕事は、前職の時の機械学習の案件がはじめてですね。

f:id:kenken0326:20190611102124p:plain

f:id:kenken0326:20190605175015p:plain
nao_yその状態から1年半の勉強で、データサイエンス業界で引く手あまたの企業に入社した訳ですね。そんなもえ氏さんがおすすめしたい学習方法を教えて下さい。

もえ氏PyQを使った学習はもちろんですが(笑)

機械学習に限らず、何かを学ぶ時には、4つの段階があると思っています。

f:id:kenken0326:20190611102124p:plain

f:id:nana_yu:20190726112723j:plain

f:id:kenken0326:20190611102206p:plain
nana4つの段階?ぜひ教えてください。

学びの4つの段階

もえ氏 はい。1段階目は夢をみることです。「これがやりたい」という動機はとても大事だと思います。私は松尾先生の本を読んだ時点でだいぶモチベーションが上がりました。モチベーションが上がれば、次にそれを叶えるための手段を探せばいいんです。
f:id:kenken0326:20190611102124p:plain

f:id:kenken0326:20190611102206p:plain
nanaもえ氏さんの場合は機械学習の可能性に魅せられてモチベーションが上がったと伺いました。2段階目はなんでしょう。
もえ氏 2段階目は何ができるのか知ること。現実的にどんな問題が解けて、そのためにどんな手段があるのか理解するのが2段階目です。
f:id:kenken0326:20190611102124p:plain

f:id:kenken0326:20190611102206p:plain
nanaなるほど。では3段階目にやるべきことは何ですか?
もえ氏 プログラムを書くとか、課題を設定して試してみるとか、実際にやってみることが3段階目です。私の場合は「メイドさん判定機」を作りました。
f:id:kenken0326:20190611102124p:plain

f:id:kenken0326:20190611102206p:plain
nana実際に興味のあるもので作ってみるということですね。メイドさん判定機ってどんなものですか?
もえ氏 写真を入れただけでその人がメイドさんなのかを判定する写真分類機です。OpenCVなどを駆使して、回転、RandomErasing、Mixupなどの前処理をしました。あと​​Kerasも使いました。これに取り組んだことで、前処理やスクレイピングを学べましたし、どのように層を積んでいくかも学べました。
f:id:kenken0326:20190611102124p:plain

OpenCV

インテルが開発・公開したオープンソースのコンピュータビジョン向けライブラリです。 URL:https://opencv.org/

​​Keras

Pythonを使ったオープンソースニューラルネットワークライブラリです。 URL:https://keras.io/

f:id:kenken0326:20190611102206p:plain
nana実際に作ってみることで技術的なことを学ベて、この段階で完璧な気もします。最後の4段階目とは何でしょうか?

もえ氏 体系的に学ぶことです。3段階目のような実践だけでは穴だらけですし、目的を達成するためにコードを書くと、知識がその部分だけに偏ってしまいます。私にとって、体系的な理解に当たるものが統計ですね。
f:id:kenken0326:20190611102124p:plain

f:id:kenken0326:20190611102206p:plain
nanaプログラミングの学習では2段階目と3段階目だけが重視されがちだったり、反対に「学ぶ」とだけ聞くと、4段階目だけを想像する事も多いように思います。ちゃんと動機付けをしてやりたいことを設定した後、体系的な部分をフォローするという順序は、学習の継続にとても良さそうです。

f:id:kenken0326:20190605175015p:plain
nao_y 目的がないまま体系的に学ぶのはモチベーションが続かないですし、かといって体系立てた理解がないといつか壁に直面しますもんね。PyQ学習者さんからもそういった類の悩みは多く寄せられるので、この4段階のお話はぜひ参考にしたいです。

次回の内容

今回はもえ氏さんにPythonを使うメリットと、オススメの機械学習の学習方法について伺いました。
その4では、ノマドワークについて、PyQの感想、今後の展望を伺います。

blog.pyq.jp

関連記事・バックナンバー

Copyright ©2017-2019 BeProud Inc. All rights reserved.