投稿

Translate

中学生がPythonを学べば生涯収入はどうなる?

イメージ
「 ソフト開発未経験のおじさんがプログラミングを学ぶ意味はあるか 」というタイトルで始まった「大森敏行のプログラミングで行こう」という日経XTECHの連載の最新号は下記のテーマでした。 *********** 中学生がPythonを学べば生涯収入が5000万円増、ChatGPTが示した計算の根拠 https://xtech.nikkei.com/atcl/nxt/column/18/00682/070200191/ 大森敏行さんが調べた結果・・・ 小学生のうちにScratchでプログラミングの基本的な概念を学び、中学生になったらPythonを学ぶと生涯収入は、どのように変わるかをChatGPTに聞いた結果、計算根拠とともに出てきた差額は+約5,000万円だったとのこと。 差額が5,000万円は、微妙に少ないのではないかと感じたので、ChatGPTに再び聞くと、この計算結果は保守的に考えた場合であり、再計算すると、 Pythonが分かる人は5~6億円 、 Pythonが分からない人は2~3億円 で、約3億円の差がつくという結果がでたとのこと。 Pythonが分かるだけではここまでの差は出ず、それを伸ばして生かす学習環境・機会・継続があって初めて数億円単位の差になるとの条件がついたが・・・ 大森さんは、「プログラミングは向いている人と向いていない人がはっきり分かれる技能だ。プログラミングに向いていない人に無理強いするのは本当によくない。重要なのは継続だ。Pythonに少しでも興味を持ったなら、 楽しく学習を続けていって欲しい と思っている。」とコメントしている。 *********** なるほど、ChatGPTに進路について教わりました。凄いね! でも、中学生からPythonを学んでもいいのかなぁ~ タローは、義務教育が終わってから学んだ方がいいと思っています。友達と遊ぶ時間を大切にして欲しいですからね。あと、子供の時は、あんまり忙しいと、やる気がなくなってしまいますから。  

#55 Section11 分類(8)まとめ

イメージ
さて、分類の最後です。 初めての Pycaret はいかがでしたか? 出力された評価結果、分析結果を詳しく説明しましたが、最低限、下記のコードを書けば、機械学習の『 二項分類 』で分析することができます。 再利用の「load_model」関数を入れても全部で16行! コードを書くのが億劫だと思っている方でも、どんどん出力が出ますので、さまざまな種類の機械学習を体験していきましょう。 次回からは、 回帰 (Regression)を体験していきます!

#54 Section10 分類(7)モデルの保存・再利用

イメージ
さて、せっかく最も性能が良いモデルを見つけたので、それを保存して、またの機会に使えるようにしておきましょう。 pycaretの『save_model』関数を使用し、下記のコードによって、選択したモデル(「best」)を保存することができます。  save_model(選択したモデルの名前, '保存するモデルの名前') 今回は、「my_first_pipeline」という名前で保存します。 「my_first_pipeline」は、現在の作業ディレクトリに、モデルのIDに *.pkl の拡張子が付いたファイル(* pickle形式 )として保存されます。これは、後でいつでも利用することができます。 pickle形式のファイルは、path引数で指定した場所、または今回のようにpath引数を省略した場合は現在の作業ディレクトリに保存されます。関数の出力や、ファイルシステムを直接確認することで、保存場所を特定できます。ただし、 pickleファイルはテキスト形式ではなく、コンピュータが効率的にデータを読み書きするためのバイナリ形式で保存されています。そのため、Googleドライブの検索エンジンでは、ファイルの内容をテキストとして解析することが難しく、 キーワードで検索することができません 。 save_model関数の主なアウトプットは、モデルだけでなく、データの前処理方法全体が一つのパイプラインとして保存されたこと、そしてそのパイプラインに含まれる個々の処理ステップの詳細と、最終的な学習済みモデルの種類とハイパーパラメータ、そして保存されたファイルの名前を示しています。この情報があれば、保存されたパイプラインがどのような処理を行い、どのようなモデルを含んでいるかを後で正確に把握することができます。 モデルの出力にでてくる英語の文章の説明を下記の2枚のスライドにまとめました。 わずか数行で、このような処理をしていたことに驚きです! 「 load_model(‘保存したモデル名‘) 」を使うと、「my_first_pipeline」という名前で保存したモデルを読み込む(ロードする)ことができます。ここでは、読み込んだモデルを「loaded_best_pipeline」と名付け直しています。 出力は、下図の青い線で囲んだものになります。 この出力の「 ▶ 」をク...

#53 Section9 分類(6)予測

イメージ
今回は、compare_models関数で求めた最も性能が良かったモデル(lr/logistic Regression)で、予測をしてみましょう。 下記のコードは、setup()で分割したテストデータ(231行×9列/Transformed test set shape)に対して予測した結果を返してくれます。 holdout_pred = predict_model(モデル名) 宣言した『holdout_pred』のholdoutは、モデルを評価するデータを作るためにデータを分割することを意味しています。別に何と宣言してもいいのですが、わかりやすいように『holdout_pred』としておきましょう。 出力は、主な評価指標となります。 『compare_models』関数を使って、モデルを評価した際の評価指標一覧と比べて、どうでしょうか?正解率(Accuracy)とF1-score (F1)はやや下がっていますが、数値が高いまま維持されています。 次に、予測結果の性能評価をした「holdout_pred」の最初の5行を見てみましょう。 holdout_pred.head() 出力を見ると、テストデータに 予測ラベル ( prediction_label )と 予測確率 ( prediction_score )が付与されていますね。 予測ラベル(prediction_label)は、予測されたインスタンスのクラスを表しています。「0」が糖尿病陰性、 「1」が糖尿病陽性でしたね。 また、予測確率(prediction_score)は、インスタンスが予測されたクラスである確率を表しています。 最も性能の良かったモデル「best」(lr/logistic Regression)をget_data('diabetes')で読込んだ「data」(訓練データ+テストデータ)すべてにあてはめて性能を確認してみます。 まずは、 「data」 の列名「Class variable」を削除し、 モデルをあてはめるデータを作成します。 「data」をコピーして、列名「Class variable」を削除し、「new data」と宣言します。次に「new data」の最初の5行を確認してみます。 下記のコードを使って、「new_data」で予測をしてみましょう! predic...

#52 Section8 分類(5)モデルの分析(2)

イメージ
さて、モデルのパフォーマンスを分析するパートの続きを始めます。 実は、PyCaretでは、「plot_model関数」を使わなくても、下記の「evaluate_model関数」を使うことで、様々なモデルの評価を可視化(グラフ化)することができます。 下図のように、 evaluate_model(best) と短いコードを書き、実行すると、21種類の描画(Plot type)を選択するボタンが現れます。 何もしない状態では、「Pipline Plot」が選択され、機械学習モデルを構築する際にPyCaretが自動的に行った前処理を視覚的に表現しています。SimpleImputerは欠損値の補完、 CleanColumnNamesはデータセットの列名の整形をしたことを表しています。 各ボタンをクリックすると、それぞれの評価を可視化したグラフが現れます。下記は、 『plot_model』関数を使って表示させたグラフですね。 グラフの中には、直感的に理解しにくいものも含まれています。4th STEPでは、クラスの予測をすることが最大の目的ですので、今は理解できなくても構いません。 予測結果が思わしくない場合、データサイエンティストや統計に詳しいメンバーとディスカッションする時にこのグラフが威力を発揮します。それぞれの グラフを見て、スライドの緑文字のように感じることができれば 一人前です。 一通り、どんなものか、解説していきます。 *********** 1. Hyperparameters パラメーター(Parameter)は、モデルが訓練データから自動的に学習し、調整していく重みやバイアスなどの値です。それに対して、ハイパーパラメータ(Hyperparameter)は、学習前に人手で設定するアルゴリズムの挙動を制御する値です。つまり、パラメータはモデルが学習によって得たもの、ハイパーパラメータはモデルの学習の前に設定するものとなります。 Hyperparametersでは、PyCaretが ハイパーパラメータをどのように設定したかを表示 してくれます。 本来、分析者が経験等に基づいて決めるものですが、PyCaretはいい感じに決めてくれます。 次スライドでハイパーパラメーターの解説をしますが、PyCaretには、このハイパーパラメーターをチューニングして一番結果が良いもの...

#51 Section7 分類(4)モデルの分析(1)

イメージ
ここからは、『 plot_model 』関数を用い、『compare_models』関数で最も性能が良かった モデルのパフォーマンスを分析 していきます。 このパフォーマンス分析も、下記の1行で結果を出してくれます。 plot_model(モデル名, plot='グラフの種類') plot_modelのグラフの種類については、下記の公式ドキュメントの『Examples by module』を参照してください。 https://pycaret.gitbook.io/docs/get-started/functions/analyze#plot_model 『モデル名』に「 best 」と記入すると、『compare_models』関数で最も性能が良かったモデル(今回はロジスティック回帰モデル)を選択してくれます。 【よく使う引数①】 'confusion_matrix' 上記の『グラフの種類』に「 ‘confusion_matrix’ 」と記入すると、そのモデルの性能評価の元になる「混同行列(Confusion Matrix)」の結果を表示してくれます。 'confusion_matrix'の出力は、縦軸が診断(結果)の患者数、横軸が検査(予測)の患者数を表す混同行列(Confusion Matrix)となります。 「1」は陽性、「0」は陰性です。「0」と「1」は、データ「diabetes」に従っていますので、 データ「diabetes」の仕様を確認してください。  https://www.analyticsvidhya.com/blog/2021/07/diabetes-prediction-with-pycaret/     【よく使う引数②】 'auc' 上記の『グラフの種類』に「 'auc' 」と記入すると、 ROC曲線の下の面積を表すAUC(Area Under the ROC Curve)を表示してくれます。 出力は、下記のようになります。これは、前回の『compare_models』の解説の部分(Section 6 『分類(3)モデルの評価・比較』のスライド6~8)と同様です。 【よく使う引数③】 'feature' 上記の『グラフの種類』に「 'fe...

#50 Section6 分類(3)モデルの評価・比較

イメージ
ここからは、『 compare_models 』関数を体験していきます。 PyCaretでは『compare_models』関数により、ライブラリで使用可能なすべてのアルゴリズム(『モデル』と言います)を 交差検証を用いて訓練 し、 評価指標を算出して性能を評価 します。 既に、『setup』で交差検証は、StratifiedKFold(K分割交差検証)と指定しています(デフォルトですが…)ので、関数型API、もしくはオブジェクト指向APIのどちらかの流儀で、下記のようにコードを書くことにより、様々なアルゴリズムの性能評価を比較できます。 この『compare_models』関数は、537行×9列の訓練データ(デフォルトで70%)を用いて、モデルを作成し、231行×9列(デフォルトで30%)のテストデータに適合させた結果の評価指標を算出します。 具体的には、下図のようになります。 左側の列から『モデルの略称』、『モデルの名称』が『正解率(Accuracy)』で降順に表示されています。正解率より右側の列は、それぞれ性能を表す評価指標となっています。 もっと詳しく知りたい方は、下記の『PyCaretの初心者向けまとめ(分類編)』を参照ください。 【参考】 https://qiita.com/shuhigashi/items/cb6816a1da1d347bbdc2 次に、性能評価の元になる 混同行列 を説明します。 下図の左側の表のように、二項分類の結果をまとめた2×2の行列を混同行列(Confusion Matrix)といいます。 横軸に予測、縦軸に結果のそれぞれの二値(二項)、すなわち陽性or陰性の個数が算出された2×2の行列となっています。臨床の現場では、予測を検査結果、結果を診断と表現するとわかりやすいと思います。この混同行列をもとにさらに算出されるのが、性能評価を表す右側の評価指標です。 それぞれを詳しく見ていきましょう。まずは、 ① 正解率(Accuracy) 正解率は、予測結果が実際に当たっていた割合を表します。 具体的に説明すると、ピンクの部分の和、すなわち、検査で陽性かつ診断でも陽性(TP)と検査で陰性かつ診断でも陰性(TN)の和を分子に、分母に全体の和を算出した比率のことです。 ② AUC(Area Under the Curve) AUCとは、主に...