![見出し画像](https://assets.st-note.com/production/uploads/images/64623123/rectangle_large_type_2_a123d18929c26d89a9f67d9b9524d5e0.png?width=1200)
データサイエンス初心者がPythonとノーコードツールで同じデータを解析してみた|その4(最終回)
こんにちは!株式会社ヒューマノーム研究所でインターンをしている佐藤です。この記事は、プログラミング初心者の私が、当社が開発するノーコードツールHumanome CatData(以下CatData)を用いてAI構築するのとPythonを書くのとで、どのくらい差が生じるのか比較しよう、という連載の第四回目です。前回までの記事は、以下のリンクからご覧ください。
この連載では、「タイタニック号事故」の乗船客情報をまとめたデータセットを利用し、事故の生存者を予測しています。今回は、前回作成したAIモデルを使った「予測」を行います。
0. 今回利用するデータ
今回は以下の二つのGoogleスプレッド形式のデータを利用します。2個目のデータには生存状況を表すSurvived列がありますが、1個目のデータにはありません。
これらは、以下のKaggleのデータの test.csv と gender_submission.csv を利用して作成しました。
また、Pythonを使ったプログラミングと比較するため、以下のコードをお借りしました。CatDataの操作と対応するコードを比較する場合は、こちらを適宜参照してください。
1. 準備:テーブルの削除
さて、前回同様に、「テーブルの新規作成」から予測用テーブルを作りたいところなのですが、CatDataの無料プランを利用している方は、2個以上のテーブルを作成することができません。新しくテーブルを作成する際は、既存のテーブルを削除する必要があります。ここでは、第一回で作成した可視化用テーブルの「#1 train(可視化)」を削除します。
![スクリーンショット 2021-10-31 12.48.12](https://assets.st-note.com/production/uploads/images/64625131/picture_pc_1179e7d69fb0f7cf515ea9fb828e6617.png?width=1200)
1. 「#1 train(可視化)」をクリックし、テーブルの詳細へ移動
2. 画面左上「⁝」をクリック→「テーブルの削除」をクリック
3. アラートが出るので「はい」をクリック
この操作で、テーブル削除され、新たにテーブルを作成することができます。ここで、可視化用テーブルではなく学習用テーブルを削除してしまうと、作成したモデルが消え、予測ができなるので注意してください。
2. 学習したモデルによる予測
ここから、前回の記事で作成したタイタニック号の乗客生存状況を予測するモデルを用いて、生存状況がわからない乗客データを使って、その生存状況を予測します。予測開始までの操作手順は以下のとおりです。
1. 予測したいデータのテーブルをアップロードする
2. 前回同様に「テーブルの新規作成」からデータを読み込む
3. テーブルの利用目的の選択で「予測」を選択して保存する
4. 作成したテーブルの「予測」の画面に移動する
5. 前回学習したモデルを選択
![スクリーンショット 2021-10-31 13.11.56](https://assets.st-note.com/production/uploads/images/64626490/picture_pc_f08afe847ef5139c0d245617f657dcee.png?width=1200)
「学習済みモデルによる予測」画面で、前回の学習で用いたテーブル「#2 train」を選択すると、上のように学習したモデルが表示されます。図の赤丸で示している「予測の開始」のボタンをクリックすると予測が始まり、画面下部に予測結果が表示されます。予測が終わった後、「予測結果」のボタンをクリックすると、予測結果を確認できます。
![スクリーンショット 2021-10-31 13.17.02](https://assets.st-note.com/production/uploads/images/64626733/picture_pc_103f5887f77c81645f4bae01240af434.png?width=1200)
以下の図は、実際に表示される予測結果の画面です。予測結果のテーブルでは、予測に使われた項目に加えて、”Prediction”(学習モデルによる予測)と “Confidence score”(信頼度)が表示されます。”Prediction”はAIが予測した結果、“Confidence score”はその結果がどの程度信頼することができるのかを数値化したものです。
テーブルの表示は以下の3種類が選択できます。
・オリジナル:作成した予測用テーブルに、PredictionとConfidence scoreを追加したテーブル
・アクションセット:オリジナルで表示されるテーブルに対して、学習の時に指定した「アクションセット」を適用した後のテーブル
・前処理後:アクションセットで表示されるテーブルに対し、予測のときに利用できない文字列と日時型の列、欠損値を削除したテーブル
※ 学習用テーブルで、文字列や欠損値の削除を実施した場合、「アクションセット」と「前処理後」では同じテーブルが表示されます。
予測結果画面には、「予測結果」タブとは別に「評価」というタブがあります。このタブでは、正解がわかっているデータを利用してAIモデルで予測した時、その予測がどの程度の精度だったか?を確認できます。
今回は乗客の生存状況が観測されていないデータ(=正解がわからないデータ)に対して予測したため、モデルの精度を評価することはできません。そこで次は、生存状況がわかっているデータに対して予測を行い、結果の評価を行ってみましょう。
3. 予測結果の評価
それでは、各乗客の生存状況を表す”Survived”列があるデータ(=正解があるデータ)に対して予測を行います。無料プランの場合、テーブル数の上限に達していますので、先ほどと同じ流れで、テーブル「#3 test(予測)」を削除してください。
まず、CatDataでSurvived列があるデータを読み込み、「予測」の画面に移動します。以下の流れで正解列を指定し、予測結果を評価します。
![スクリーンショット 2021-10-31 14.11.54](https://assets.st-note.com/production/uploads/images/64629776/picture_pc_c755bfbcff727a6a07394a150dae3b75.png?width=1200)
1. 「学習済みモデルによる予測」内で「予測結果と比較したい列を選択」をクリック
2.「予測する値」で正解となる列(今回は”Survived”)を指定
3. 先程同様に「#2 train」を選択し、「予測の開始」をクリック
予測が終わったら、「予測結果」のボタンをクリックし、予測結果を確認する画面に移動します。「評価」タブをクリックすると、予測結果と実際の生存状況を比較した評価結果を見ることができます。
![スクリーンショット 2021-10-31 14.26.18](https://assets.st-note.com/production/uploads/images/64630596/picture_pc_e201d9f6186b0512b2fcd091c5858bb8.png?width=1200)
「評価」画面では、混同行列とROCカーブが表示されています。混同行列を見ると、精度が0.78417とあり、417個中327個の予測が正しかったことが分かります。
それでは、前回のモデルの学習時に計算した精度と、今回のデータに対する精度を比較してみましょう。前回データについては以下を参照して下さい。
前回のテストデータを使って確認した精度は0.78652でした。この値は、今回のデータにおける精度0.78417とほとんど変わりません。このことから、今回利用したデータに対しても、予想通りの精度の結果が得られたことが分かります。
なお、得られた予測結果と他の列の関係を確認したい時は、以下のように操作をします。
1. 予測結果にある「結果を複製して新規テーブルを作成」をクリック
2. 予測結果の列が追加された新規テーブルが作成される
※ 無料プランでは学習用テーブル (この記事内では「#3 train(学習)」)を削除する必要があります。ご注意ください。
![スクリーンショット 2021-10-31 17.05.29](https://assets.st-note.com/production/uploads/images/64640902/picture_pc_45861406b99a6ab6b43028340acdf955.png?width=1200)
4. Pythonとの比較
Pythonで上記の流れを実装する場合、scikit-learnライブラリを用いて学習モデルを構築し、そのモデルを予測に用いるのが一般的だと思います。
例えば、今回用いた機械学習手法・RandomForest の場合は、sklearn.emsemble.RandomForestClassifier を利用し、predict() 関数で予測を行っていました。また、予測結果に対する精度の計算では score() 関数を、混同行列の計算では confusion_matrix() 関数を使うなど、計算したい値に応じて異なる関数を使っていました。
この記事を通して何度かコーディングを行いましたが、各作業でどの関数を用いるべきなのかが分からず、参考にした本とインターネットで何度も調べていました。
前段最後でご紹介した「予測結果と他の列の関係の確認作業」も、予測結果をもとに次の解析に進む際に必ず行う操作です。CatDataではワンクリックで終わる作業ですが、Pythonを使う場合は、テーブルを複製した後、行番号を見ながら値を当てはめていくというプログラムの作成を必要とします。
5. 予測結果の考察
ここで、実際の”Survived(生存状況)”データと、その予測結果を比較してみましょう。
![スクリーンショット 2021-10-31 17.12.34](https://assets.st-note.com/production/uploads/images/64642148/picture_pc_67af27099eb6667ac89a23792cfaad46.png?width=1200)
まず、年齢ごとに予測結果が変わるかを調査してみます。棒グラフの一番左の棒には、年齢が0.17~7.753歳の人の数が入っています。生存した(テーブルでは1と表されている)人の人数を見てみると、実際の結果では7人なのに対して、予測結果では14人と示されています。他の年齢層を確認しても、生存していると予測した人数が実際の生存者数よりも少し多い傾向があることが分かります。グラフを見る限りでは、全体としては生存者と非生存者の割合は変わらず、どの年代も均等に予測できてそうなことが分かります。
![スクリーンショット 2021-10-31 17.24.19](https://assets.st-note.com/production/uploads/images/64642224/picture_pc_ceb8a6008cbd57745b49e5df76693d9f.png?width=1200)
次に、実際の”Survived”(生存状況)とその予測結果を”Pclass”(等室クラス)を用いて比較します。等室クラスが1だった人を確認すると、実際のデータでは生存した人(1と表されている)が50人、死亡した人(0と表されている)が57人であるのに対し、予測したデータでは生存した人が72人、死亡した人が35人と、生存した人数が多く予測されています。
また、等室が3だった人の場合、実際のデータでは生存した人が72人、死亡した人が146人であるのに対し、予測したデータでは生存した人46人、死亡した人が171人と、実際のデータよりも生存した人数が少なく予測されています。AIは等室クラスの高い人が多く生存した、と予測していることが分かります。
6. 感想
ここまで、「可視化」「学習」「予測」について、Pythonでのコーディングとノーコードツール・CatDataを使った解析と並列で比較してきました。プログラミング初心者の私には、各作業で用いる関数やライブラリの理解や、どのような操作が最適なのかを考えながらコーディングすることに、とても苦戦しました。一連の過程のコーディングを自分の力だけできるようになるまでには、まだまだ遠い道のりであると感じました。
CatDataは次に行うステップを示してくれるため、難しく考えずに楽しく機械学習をすることができました。今回の記事では触れていませんが、コーディングでやるようなことも、CatDataが自動でやってくれるのも魅力の一つかなと思います。また、コーディングで行った時よりも、各過程の流れを理解することができました。
機械学習をはじめて学ぶ時などは、いきなりコーディングに挑戦するのではなく、CatDataで過程を理解する段階を挟むことで、コーディングも行いやすくなるように思いました。
※ 筆者紹介
佐藤 美結(慶應義塾大学環境情報学部1年):植物の生態に興味があります。好きなものはポケモンです。機械学習、プログラミングを今年から学び始めました。
---
私たちは今年度から当社でインターンシップを始め、ワークショップのTAや機械学習ツールの使い方の紹介記事を執筆しています。今後も、AI構築の実際についてご紹介していきますので、お読みいただけると嬉しいです!
このシリーズは以下のリンクからまとめて読むことができます。
【参考】もっと細かく手順を知りたい方へ
ペンギンについて調べた表データを使って、一連のAI構築・データ解析の流れをCatDataを通して学ぶテキストを無料公開しています。データ解析で使われる用語をイチから知りたい方はあわせてご覧ください。
AI・DX・データサイエンスについてのご質問・共同研究等についてはお気軽にお問い合わせ下さい!