“機械学習プログラムの開発及びアドバイス”の振り返り

“機械学習プログラムの開発及びアドバイス”の振り返り

表題の通りクライアントから
「機械学習用プログラムの作成とアドバイスを行ってほしい」
との依頼があったためここ2カ月間、本業とは別に取り組んできました。

そこで本記事では、ポートフォリオ的な意味も込めて、実施したこと、その際に経験したこととその所感について等記載していきたいと思います。

実施内容

大まかに挙げると以下の3つです。

  • データのスクレイピング
  • 機械学習用のcsvへ変換
  • 機械学習

尚、プログラム言語はpythonで行いました。

データのスクレイピング

ある3サイトから必要なデータをスクレイピングを行いました。
詳細については守秘義務等考慮し割愛しますが、

「3サイト分の情報をスクレイピングを用いて取得する」

ということを実施しました。

当初は2サイト分でよかったのですが、気が変わったらしく1サイト増えました。

もちろん、追加の料金を頂いているので問題はありませんでしたが、設計していく中での影響範囲を考えると、
「ちょっとなぁ、、」
という感じはありました(^^;

私自身の次回の対応への教訓を含めもし依頼を受ける方が読んでいらっしゃいましたら、今後の参考にしていただければ幸いです。

また、今回の

スクレイピング⇒データ出力⇒機械学習

は手探りで実施したのですが、
プロジェクト完了後もっとできることがあるかと思い色々調べていたところ、
どうやらこのフローは機械学習の考え方としてフレームワーク的に存在していたらしいです。。
(ま、結果合ってたからいいか。)

機械学習用のcsvへ変換

スクレイピングを行ったばかりのデータですと、
機械学習用にインプットする際不都合を起こすため、
そちらを加工するためのプログラミングを別途行いました。

中身は配列をいじっているだけですので地味ですが、大切な作業の一つです。

機械学習

今回は2値化問題でしたので、scikit-learnを用いた決定機分析を採用しました。
また、シンプルで可視化も容易であることも選定理由にあります。

クライアントとやりとりをしていて

今回のクライアントは50代の方だったのですが、
特に「ハングアウトを使ったことがない」というのは衝撃でした。

最初は「大丈夫かな…」と不安にもなりましたが、
そこは切り捨てずに、めげずに進めていきました。

クライアントさんもあきらめずについてきてくれました。

ご自身のプログラミングへの理解がまだ少ないと思っている方へ

本来は以下の文章をクライアントに送る予定だったのですが

「わざわざ送る必要もないか」

と思いメモとして残しているファイルがありましたので、そこから抜粋しました。

人工知能というのは一見機械が意思を以て動いているように見えるかもしれませんが、
誰か人間がプログラムで書いている以上、必ずどこかに操縦している人間がいるはずです。

将棋や囲碁も一手ずつ機械が考えて打っているように見えますが、
総当たりでポイントする等、人間がどこかで設定をしています。

また、プログラムを書くこと自体も自動化できないです。
基本的には人間が書くものです。
よって
「どういう仕様で」
「どういった形で動かし」
「どういった場合に中断するか」
等を細かく人間の言葉で言語化することが第一です。
その上で、プログラムで実現可能か調査し
可能であれば、実際にプログラム化し機械でも動かせるようにする。
(日本語⇒プログラム化)
という流れです。

機械は0か1かでしか判断できないため。

以上、自論ですがご参考までに。

プログラミング時のエラーに関して

今回接したクライアントさんの質問や行動を見ていて、
「エラーが出た時点でどうすればいいかわからなくなってしまう」
状況に何度か遭遇しました。

確かに、せっかく頑張って書いたプログラムに対して、
無機質な形でエラーが出力されるのは最初は戸惑う気持ちもわかります。
ただ冷静になり、そのエラーがなぜ発しているのかを見ると、解決の糸口が書いてあることがあります。

最初はクライアントさんも一種の思考停止状態でただ私に聞くだけでしたが、
エラーの内容を読むよう助言をすると、焦らず解析に向かってくれました。

どの時点でのエラーが出ているのかを把握するためにも、石橋を叩いて渡る意識を持ってプログラミングをしていくべきだと、自戒を含め思いました。

もちろん、上級者の方は石橋を叩かなくても飛び越えていけるでしょうが^^;

私も早くその領域にたどり着きたいものです。

クライアントさんからいただいた質問で印象に残ったこと

「pandasってなんですか?」

一応、「pandasはライブラリで…」といった内容を返答しましたがあまりいい反応がなかったため
「ピタゴラスイッチの一部分のようなもので…」という補足を加えました(^^;
いまいち伝えられていないのではないかと反省しております。

ちなみに、ライブラリとは一言で言うとプログラムの部品を集めたファイルのことです。
ただこれだとまだ不十分な気がします。。
もう少しかみ砕いて説明しなければいけないと思います。

「”Google Colaboratory”を使用した理由はなんですか?」

今回は機械学習用に”Google Colaboratory”を使用したのですが、その理由について問われました。
「環境が統一できているため、教えている最中動かないということがなくなる」と回答し、実際にも回答通りの選定理由になります。

「どう調べていけばいいかわからないです。。」

結論、「勘所をおさえる」これに尽きます。

そのためにはある程度調査する経験値が必要で、
これは参考書には書いていないため
実際に自分で手を動かし考えていく必要があります。

初心者の方は教えてくれないと捉えるかもしれませんが、”教えない“のではなく”一概に言葉で表現できない
のでは、というのが自論です。(不明点の要素がたくさんあるため)

教える人がうまい人ってどういう人なんだろう?

上記の質問に答えようとしているうちに、このような疑問が浮かんできました。

私なりの見解として、以下2点が挙げられます。

  • 質問者の目線で考えられる人
  • それを言語化できる人

なのかな、と。こちらについては別途考察を執筆しようと思います。

おわりに

今回紹介したのが学校の先生なのですが、本業のエンジニアをしている私からして、だいぶ「ガラパゴス化」と言いますか、知識に差があることを痛感しました。

今回のように
「機械学習とは?」
何がなんだかわからないが
「今後の生徒のためになんとかしたい」
という熱意の元、ご依頼を頂いたクライアントさんには感謝の言葉が着きませんし、
なにより、それで完成形に持っていけたことが自分の自信になりました。

途中プログラムが思ったように動かず、挫けそうなときもありましたが、クライアントさんがいるという外的要因をうまく駆使し、最後までやり遂げることができました。

外的要因、大事です。

また、クライアントが実際に操作しているところを拝見したのですが、正直、プログラム以前にPCの扱い方から教えるべきかと思ったため、座学的な意味も込めて教えていくことにしました。


(例えば、コマンドプロンプトで上キーを押すと履歴が出てくる、Tabを押すと候補の名称を補間してくれる、等)

確かにPCの扱い方というのは学校では教えてくれないだろうと思いますし、
私が高校時代に受けた情報の授業だけでカバーするのは厳しいと思いました。。
かといって「社会人になれば学生ではない、ということで自身で調べる能力が必要」と言われるでしょうから、
学ぶ機会がなく、これから生きていくには大変と捉えられる部分もあります。

そもそも学習カリキュラムに入っていないでしょうし、
変えるにも教育機関や教師のマインドのアップデートが必要です。
(確かパワポで簡単な自己紹介を作ったりするくらいだったような。。)

長々と書いてしまいましたが、今回機械学習プログラムの開発及びアドバイスについて私なりに思ったことを記載させていただきました。

本記事をご覧いただいて、個人の方がクライアントとの進め方について少しでも参考になれば幸いです。