« yWriterは映画の脚本を作るためのアプリだったのではないか | トップページ | 管理職に求められる能力はPM理論そのものではなかったのか »

2021/01/11

Pythonデータ分析試験、Python基礎エンジニア試験に合格した感想~Pythonの機械学習や深層学習が目指すのは因果推論ではないか

Pythonデータ分析試験、Python基礎エンジニア試験に無事に合格できた。
感想をラフなメモ。

【参考】
Pythonデータ分析試験 | 一般社団法人Pythonエンジニア育成推進協会

Python基礎試験 | 一般社団法人Pythonエンジニア育成推進協会

【1】Python基礎エンジニア試験は簡単だったが、Pythonデータ分析試験は難しかった。

Python基礎エンジニア試験は、RubyやJavaを知っていれば、それら言語のライブラリを比較しながら理解すれば良かった。
Pythonは確かに書きやすい。
Rubyのように異音同義語のようなAPIはないし、文法も簡素だし、Tabのインデントだけでプログラミングできるので、手に馴染む。

しかし、Pythonデータ分析試験では、Numpy・Pandas・MatplotLib・sklearnの割とたくさんのAPIを覚える必要があるし、統計学や線形代数の数学の知識、分類・回帰・次元削減・クラスタリングなどの機械学習の知識も必要になるので、Python以外の知識習得に手間取った。
統計検定2級、G検定も取得していたので、それらの知識に慣れているから1ヶ月で十分だろう、と思ったが、実際は2ヶ月以上習得にかかった。
まだまだ、Pythonのセンスが足りないので勉強すべきと分かった。

なお、Python基礎エンジニア試験の教科書「Pythonチュートリアル 第3版」、Pythonデータ分析試験の教科書「Pythonによるあたらしいデータ分析の教科書」は持っておいた方がいい。
このAPIはどうだったけ?と振り返る時に、辞書代わりになる。

【2】Python基礎エンジニア試験、Pythonデータ分析試験で良かったのは、Web上の模擬問題が充実していること。

PRIME STUDY(プライム・スタディ) ? Python試験とPHP試験の無料模擬試験サイト

G検定、Python、Rubyの模擬テスト | DIVE INTO EXAM

上記のWeb問題を5~10回転ぐらいやって100%得点できてから受験したので、そんなに緊張感はなかった。
特に、PRIME STUDYの問題の方が確かに難しかったけれど、出題内容は「Pythonによるあたらしいデータ分析の教科書」と全く同じなので、理解に役立った。

【3】Pythonデータ分析試験、Python基礎エンジニア試験を良かったことは、3つある。

【3-1】プログラミングはブロックを組み立てる感覚が大切、と改めて感じたこと。

Python 初心者だから、Numpy、Pandas、Matplotlib、sklearnのAPIでつまづいてるけど、機械学習は面白い。
教師ありデータなら、train_test_splitして、機械学習のモデルにfitで学習させて、scoreで評価し、最後にpredictで予測する。
実際は、そういうデータの前処理に大量のロジックを組み込むわけだが。

すると、1行でもロジックというブロックが崩れると、プログラムは意図通りに動かなくなる。
ちょうど、積み木の途中で1個のブロックが崩れると、全てが崩れてしまうみたいな感じ。
プログラミングはとても繊細な作業。

プログラミングが書けるかどうかは、そういうセンスに依存する所も大きいと思う。

「60%の人間はプログラミングの素質がない」記事のリンク: プログラマの思索

【3-2】プログラミングは書くだけでなく、開発環境も大事、と改めて感じたこと。

Pythonが良いのは、Anacondaで一通りのライブラリが揃い、ライブラリのバージョンごとに依存した開発環境を別々に保持できること。
一方、RubyならGemのバージョン依存にすごく手間取るし、Ruby初心者はRailsの環境構築ですぐにつまずいてしまう悲しさがあると思う。

また、PyCharmという開発環境がとても良い。
コード補完できて、デバッグもできるので、プログラミングにストレスがない。
一方、コンソール画面で対話形式でPythonをプログラミングできるよ、ブラウザ上でJupytorNotebookでグラフも書けるよ、と言われても、やっぱりコード補完できないのは辛い。

僕は、IntelliJの有償ライセンスを購入したので、JupytorNotebook上でもコード補完もデバッグもできて、ああ、こういう風に動いてるのか、とか、初心者レベルからの気づきがあった。
プログラミング初心者はこういうつまらないレベルでつまずいて、先に行けなくなるから。

DockerやAnsibleの考え方もそこに通じているのではないか、と思う。

【3-3】Pythonを通じて、最先端の技術に簡単にたどり着けること。

線形代数や微積分、統計学の数学の知識は、それがなくても、Pythonを書きながら慣れていけばいい。
Numpyのブロードキャストやユニバーサルファンクションに慣れれば、自然に線形代数は理解できるはず。
統計量の計算、データの前処理となる分散正規化、ヒストグラムで表示する前処理となる層化抽出法、などは、PandasやMatplotLib、sklearnに慣れれば、理解できるはず。
sklearnのSGDライブラリを使いこなせれば、微積分の考え方も分かるはず。
もちろん、「ゼロから始めるディープラーニング」のサンプルプログラムを動かしながら慣れていけば、ディープラーニングだけでなく、微分における極小値や最小値の違い、鞍点のイメージも理解できるはず。

つまり、Pythonの機械学習ライブラリを使いこなせるようになれば、自然に、統計学・線形代数・微積分の知識も身につくはずだ。
紙と鉛筆で計算することも大事だが、プログラミングでは、要は動かしてナンボの世界だから。

そして、今のIT技術の最先端に一度到達できれば、他の分野でも、初心者レベルから今の自分のレベルまでに到達するにはどれくらいの道のりが必要なのか、そこから先にはどんな課題が控えているのか、を想像できるようになる。
そうすれば、すごく楽しくなる。

おかげで、Pythonの機械学習や深層学習の本が読めるようになってきたので、乱読できるのがすごく楽しい。
まずは「Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎」から読み始めていて、今頃になって、そういう意味だったのか、とか色々気づきがあった。

【4】Pythonの機械学習や深層学習ライブラリを覚えた後で、やりたいことは、目の前の問題事象に対し、原因とその予測を見つける因果推論ではないか。

100件以上のデータがあれば、分類モデルや回帰モデルで簡単にモデルを試せて、やりたい問題が解けるのに感激した。
最終的にやりたいのは、目の前の問題やイベントに対して、誰も見つけなかった因果関係の発掘だよな、と思う。

Python でプログラムを書ければ、誰でも新しい因果関係を発見して、経験則と言う法則を作り出せる。
たとえば、行動経済学や公共経済学であれば、こういう政策を政府が提示した場合、国民の消費活動や企業の生産活動はどう予測されるか、などの問題も、スマホやWebで収集した大量データをクラウド上に集めて、機械学習や深層学習のエンジンでモデルを学習させれば、その結果を予測することもできる。
つまり、回帰分析のように、予測したい目的変数に対し、有意な説明変数を見つけることで、単に相関関係を見つけるだけででなく、AならばBとなる、といった因果推論まで提示できるはず。

経済学は信頼性革命や構造推定により大きく変貌している: プログラマの思索

機械学習で反実仮想や自然実験が作れる: プログラマの思索

IT企業が経済学者を雇い始めた理由が面白い: プログラマの思索

社会現象や人間の心理に対し、こういう因果推論を経験則、法則として数多く見出すことができれば、それらは一つの規範を示す。
つまり、哲学の言う、ザイン(である・存在)ではなく、ゾルレン(かくあるべし・規範)を学問として提示できるはず。
最終的には、全ての文系学問の出てくる諸問題は、統計確率論を基盤としたPythonの機械学習や深層学習で実装されたモデルから導かれる規範を樹形図のように整理するだけで、自然科学の中の一つの学問分野に収斂されるのではないだろうか。

こういう技術が直近10年で当たり前になったのもすごいし、こういう技術を知らずに、今までの知識や技術に固執するのも一つのリスクだな、と思う。

|

« yWriterは映画の脚本を作るためのアプリだったのではないか | トップページ | 管理職に求められる能力はPM理論そのものではなかったのか »

統計学・機械学習・深層学習」カテゴリの記事

Python」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« yWriterは映画の脚本を作るためのアプリだったのではないか | トップページ | 管理職に求められる能力はPM理論そのものではなかったのか »