分からない?機械学習はどう試せばいいのか

あなたは、こんなことを考えたことは、ありませんか?機械学習の本を見て、なんとなく分かったので試しにやってみたいが、一体どうやって試せばいいのだろう?と。どうやって、スキルを伸ばしていけば、いいのだろうと。

Webアプリの場合、なんか思いついたものを適当に作ることもできますが、機械学習の場合は、そうもいきませんよね。適当なデータがない限り、試すことができません。テキトウにデータを作る訳にもいきませんし、仮にやってみたとして、作ってみたモデルがすごいのかすごくないのかも、一人だとよくわかりません。

今回のエントリーでは、初心者がそんな学びたての機械学習を試す方法について、情報を収集して考えてみました。

データを収集するには

機械学習の本を買うと、だいたい出てくる例題が、アヤメの品種の分類とか、手書き文字の画像の分類とかだと、思います。あれの元ネタがどこにあるかといいますと・・・

ここです。:カリフォルニア大学アーバイン校

351個のデータセットがあるそうで、金融っぽいものや医療データっぽいものも、あります。とりあえずやってみる分には良いですが、問題点として、

  • 英語なので、入力データの意味がいまいちよくわからないことも、ある
  • なんか予測するモデルを作ってみたとして、そのデキがよいのか悪いのか、自分がどれくらいの実力なのか、いまいちよくわからない

という点があります。現代のエンジニアたるもの、英語くらい出来るべきだというのは、それはそうでしょうが・・・だからといって、一朝一夕で英語が出来るようになるわけでは、ありません。日本語のサイトがあれば、それに越したことはないと、思います。

そこで、活用してみたいのが・・・

コンペサイトの練習問題に挑戦しよう!

これです。AI/機械学習のコンペサイトとして、世界的に有名なのはKaggleというサイトですが、それの日本版とでも言うべきサイトが、あります。それが、こちら

signate.jp

元々、DeepAnaliticsという名前だったのが、2018年4月に、SIGNATEという名前に変わったみたいです。安心と信頼の(?)日本語サイト、入力データの説明も日本語でされており、コンペに投稿すれば、自分が大体どれくらいの実力なのかも、分かります。しかも、練習問題は、期間無制限で挑戦できるという、初心者には優しい(?)親切設計つき。初心者がまず力試しをしてみるには、うってつけのように思います。

そこで、実際にピックアップしてみた、練習問題が・・・

銀行の顧客ターゲティングをしてみよう!

これです。以下のような顧客データを元に、その顧客が、定期預金口座を開設するか否かを、機械学習により予測してみよう、という問題に、なります。

項目名 意味
id 通し番号
age 年齢
job 職種
marital 未婚/既婚
education 教育水準
default 債務不履行があるか
balance 年間平均残高(€)
housing 住宅ローン(yes, no)
loan 個人ローン(yes, no)
contact 連絡方法
day 最終接触日
month 最終接触月
duration 最終接触時間(秒)
compaign 現キャンペーンにおける接触回数
pdays 経過日数:前キャンペーン接触後の日数
previous 接触実績:現キャンペーン以前までに顧客に接触した回数
poutcome 前回のキャンペーンの成果
y 定額預金申し込み有無(1:有り, 0:無し)

実はこのデータ、先の「カリフォルニア大学アーバイン校」のサイトにもあるのですが、少しデータが簡易化されています。具体的には、「欧州銀行間取引金利」とか、「消費者物価指数」などの、いくつかの項目(指標)が、省略されています。難しそうな項目が省略されて、初心者がまず力試ししてみるに、分かりやすそうな項目構成に、なっています。

なっているのですが・・・

このデータセットのいいところ

このデータセット、先のアヤメや手書き文字と違って、なかなかに趣のあるデータセットになっています。まず、アヤメとかと違って、そうそう簡単に精度が出ません。というのも、最後のこの項目、

項目名 意味
y 定額預金申し込み有無(1:有り, 0:無し)

0:無しがほぼ9割を占めるという、偏りがあるというか現実そんなもんなんだろうという、にくらしい構成になっています。よって、全部Noと答えてしまえば、見かけ上精度90%のモデルになるのですが、それで「良いモデル」かというと、当然そうではありません。肝心かなめの、定額預金を申し込んでくれそうな優良顧客を、一人も発掘できていないからです。じゃあ、多少精度を落としてもいいので、1:有りを多めに出すモデルにした方がいいのかというと・・・そうとも、言いきれません。可能性の低い人にあまり営業をかけても、この労働力不足のご時世、色々無駄の多いキャンペーンになってしまうからです。

・・・などなど、ビジネス的に考えて、どういうモデルを作れば、費用対効果の高いキャンペーンが打てるだろう?なんて、機械学習をお仕事に使う際の思考トレーニングなんかにも、なったりします。

そしてもう一つ、分かりやすく精度を上げる工夫が、見えづらい点です。機械学習の場合、入力データと入力データを掛け合わせて、もっと精度が上がりそうな新たな入力データを作る、いわゆる特徴量設計が重要かと思いますが・・・

このデータ、分かりやすく掛け合わせれそうな項目が、あまりありません。例えば、同じく有名な練習問題の「不動産の成約価格を予測する」問題だと、なんとなく、「周辺物件と比較できそうな指標を入れれば、精度があがるかな?」なんて発想が、比較的簡単に出てきます。なので、「その物件の面積が、周辺物件の面積の平均値よりどのくらい大きいか?」なんて指標を、作ってみようかな?なんて、発想したりできます。

しかしこの問題の場合・・・例えば、ローン持ってない人の方が、定額預金しそうかな??なんて、想像は沸きますが、じゃあこの項目と何を掛け合わせれば、どんな入力データが作れるかというと、???と、なりませんか?

そんなわけで、分かりやすい特徴量設計が思い浮かびづらく、精度もそう簡単に上がりづらい分、逆に特徴量設計を始めとした精度の上げ方について、いろいろ調べてみたりする、いいきっかけになります。

というわけで、次回以降、本データを活用して、具体的に機械学習していってみたことを、アップしていきたいと、思います。最後まで読んでいただいて、ありがとうございました。