こんにちは。Mocal designの佐藤です。
これまでの当ブログ記事では機械学習を用いた時系列分析、クラスタリング、分類について簡単に説明してきました。
本日はデータの前処理について説明したいと思います。
弊社では機械学習を用いて以下のようなことを行っています。
・時系列の業績予測
・顧客や商品の特性分け
・天候から来店客数を予測する回帰分析など
私自身、mocal design事業とは別にリユース店「買取リッチ東京」を経営しているため、上記の他にブランド品の中古価格や金相場の予測も行っています。
今回「人気腕時計ブランドであるロレックスの形状から買取価格を予測できるか?」ということを試してみたので紹介させていただきます。
1.ロレックスの形状から買取価格を予測できるか?
ロレックスは他のブランドに比べると創業以来、大幅なシリーズ変更はあまりないブランドです。
昔から大きな変更がないということが現在のブランディングに大きく影響しているのですが、新型発表後に相場が落ちるものと落ちないものがあります。
弊社でもお客様が発売後すぐ売りにいらっしゃる場合、数か月後までの換金率を予測して買い取ります。
ただし、いくらまで追えるかという判断は鑑定士による感覚的なものでした。
今回の予測結果は来年以降発売されるロレックスを仕入れる際の参考にしたいと思います。
ロレックスはアンティーク品を含めると膨大なモデル数となりますので、まずは主要250本のアイテムの価格や特徴について学習させていきます。
学習させる価格についての情報は定価、新品価格、中古価格、買取価格推移など。
学習させる特徴はシリーズ名、形状、サイズ、文字盤の色、ケース素材、ベルト素材、インデックスにダイヤモンドが使われているか(使われている場合の個数10個または8個など)、発売年、日付表示の有無、クロノグラフ(ストップウォッチの有無)、防水・・・など。
これまでの記事でも説明した通り、一方の数値が与えられたとき、もう片方を予測することを回帰分析と言います。
まずはこれらの特徴と価格をエクセル上に書き出します。
データ分析をするにあたり、これらの情報を収集するのが一番大変な作業でしょう。
250本の個体に対して、20個の特徴を設けたため、5,000個のセルを埋める作業に3日費やしました。
データが揃い、エクセルのセルがすべて埋まれば、分析開始です。
具体的には250本のロレックスのうち、前半の200本を学習データ、後半の50本をテストデータとして設定しました。
つまり、機械さんには前半の学習データの特徴と価格の相関関係を学習してもらい、後半のテストデータの価格を目隠しして回答させるのです。
ここでは1つの回帰モデルで学習させるのではなく(前回の記事で説明した)線形回帰、リッジ回帰、ラッソ回帰、ランダムフォレスト回帰の4種類を用いて、どの回帰モデルが予測した結果の誤差が少ないかということを試してみましょう。
線形回帰、リッジ回帰、ラッソ回帰、ランダムフォレストについて詳しくしりたい場合はこちらの記事をどうぞ。
【過学習②】線形回帰における過学習について | 儲かるデザイン|小平市のWEB制作会社 (mocaldesign.tokyo)
2.予測結果
モデル名 誤差
線形回帰 ・・・+75万円
リッジ回帰・・・+75万円
ラッソ回帰・・・+73万円
ランダムフォレスト・・・+42万円
右側の金額が何かというと、実際の買取価格に対して機械が予測した価格の誤差です。
結論からお伝えすると、ランダムフォレストというモデルで42万円の誤差。
250本の平均買取価格が225万円でしたので、誤差が最も小さいランダムフォレストでも予測が18%ずれていたという結果がでました。
ここからはパラメーターを調整して、誤差を縮めていく作業を行います。
具体的にどんな方法かというと、最初に設定した学習データ200:テストデータ50という比率を変更してみます。
学習データ210:テストデータ40
学習220:テスト30
学習230:テスト20
学習240:テスト10
学習190:テスト60
学習180:テスト70
学習170:テスト80
・・・
・・・
・・・
もちろんテストデータに対して、学習データの比率を増やしたほうが誤差は縮まります。
さらに収集したデータの順番をシャッフルさせたり、多項式の特徴を用いたり用いなかったりと、ありとあらゆる組み合わせを試してみます。
もともとデータ総数が250本分と少ないため、どれを学習データにするかにより誤差が大きく変わってしまうのでしょう。
ブースティングという手法を用いて無理やり正解に近づけたら、誤差は平均39万円まで縮まりました。
ここで答え合わせをしてみましょう。
ロレックスのエクスプローラーⅠ(214270)というモデルがあります。
木村拓哉さんがフジテレビ系列の「月9」ドラマ「ラブジェネレーション」でつけていたので名前を聞いたことがあるという方も多いかもしれません。
ちなみに214270はそのエクスプローラーⅠの最新モデル!
弊社が運営するリユースショップ「買取リッチ東京」では2020年11月に80万円でお買い取りしたモデルです。
機械さんはどう判断したでしょうか?
124万円で買い取りしてちょ!!!
高い!!!
結局44万円のずれとなってしまいました。
このモデルの言う通りお買い取りしていたら大損失でしたね・・・。
3.《結論》このモデルは使えるか?
予測結果を見る限り、ロレックスの形状と価格に相違関係はなさそうです。
もちろん、特徴に為替や世界の経済状況、希少性や取引個数を加えると、これまで以上にこのモデルの精度があがると思います。
その他にもTwitterのタイムラインから型番のテキストを取り出し、話題性も特徴に加えると効果がありそうなので、引き続き予測を続けていきたいと思います。
それでは本題にはいりましょう。
ここまでが本題ではないのかとびっくりした方も多いかもしれません。
実はここまでの話で最も重要なのはデータ分析をしている最中ではなく、データ収集を行っていた3日間なのです。
どんなに良いモデルを使っても、しっかり前処理ができていないと予測結果は全く変わってしまいます。
4.データの前処理について
ここからは前処理するにあたり重要なポイント
・欠損補完
・ダミー変数
・正規化
について説明していきます。
まずは欠損補完について
5.前処理のポイント① 欠損補完
データ収集していると、打ち漏れや調べてもわからない情報(欠損)が発生します。
5,000個のセルの中から「欠損を確認する作業」と「欠損を補完する作業」が必要となるのです。
ちなみに欠損確認と補完作業は機械学習で簡単に行えます。
穴を埋めるべく、欠損値を推定する回帰モデルを作成すれば良いのです。
この時、欠損値を導くのに平均値をとるか中央値をとるのか、または複雑なモデルを使うのかは人間の判断にゆだねられます。
6.前処理のポイント② ダミー変数
今回のように特徴から買取価格を予測する回帰モデルを利用するとき、ロレックスのシリーズ(たとえばデイトジャスト)を文字データで入れるとエラーになってしまいます。
シリーズ名ごとに番号を振るのがベストです。
デイトジャストというモデルは0
オイスターパーペチュアルというモデルは1
エアキングというモデルは2
・・・
ミルガウスというモデルは20という番号を振るとしましょう。
実は機械にこのまま特徴として学習させることも危険なのです。
なぜなら、人間にとってはただのナンバリングのつもりでも機械はそう判断してくれません。
0のナンバーをつけたデイトジャストより1をつけたオイスターパーペチュアルのほうが高い。
20をつけたミルガウスは1のデイトジャストよりも20倍高額なのではないか?
と判断されてしまうからです。
その場合、ダミー変数という手法を用います。
具体的にはもともと1つのシリーズ名という特徴を20個の特徴に分けます。
20個の特徴というのは、ひとつめの特徴がデイトジャスト、2つめがオイスターパーペチュアルというように元々1つの特徴にナンバリングしていたシリーズ名を20個の特徴に分解するということです。
つまり、ダミー変数を用いることにより、「デイトジャスト」という特徴では「デイトジャストであれば1、デイトジャストでなければ0」というように判別されるようになったのです。
同様に、ふたつめの「オイスターパーペチュアル」という特徴では「オイスターパーペチュアルであれば1、オイスターパーペチュアルでなければ0」というように判別されます。
機械さんに頼めば、ナンバリングしている数字を簡単にダミー変数化してもらえます。
この時点でロレックスの元々の特徴量20に対して、その中の1つの特徴(シリーズ名)が20個の特徴に増えたため総特徴量は39種類に増えました。
この時点で250本の時計に対して39種類の特徴量。
エクセルのセルにして9,750個のデータ数に変化したことになります。
シリーズ名だけでなく、文字盤の色や素材といった本来数字にすべき情報でないデータにもダミー変数をかけてあげましょう。
7.前処理のポイント③ 正規化
ロレックスの特徴としてケースサイズというものがあります。
40mm、38mmというようにケースサイズが何ミリあるかということなのですが、この情報もこのまま使うと予測精度が落ちる危険があります。
さきほど説明した通り、シリーズ名は1か0で判別されるようになりました。
ダミー変数を用いたシリーズ名に対し、40や38などと大きい数値のケースサイズ特徴を学習させると、優先的に価格への判断材料として使われてしまうかもしれないからです。
当然のことながら製造年式も同じ考えです。
2020や1980など、そのままの数字であてると、桁が多いため他の特徴よりもこちらの情報を優先的に判断されかねません。
この場合は学校生活で慣れ親しんだ偏差値のような表示に変えてあげるのがベストです。
50を中心とした偏差値でも良いですが、今回の場合は最も小さい1か0にわけられたシリーズ名にあわせます。
ケースサイズと年式を±1の範囲で正規化すると良いでしょう。
これまで行った欠損補完、ダミー変数と同じく正規化も機械学習上で簡単に行えます。
精度の高い予測をするにあたり、モデルやパラメーターの選択も重要ですが、それと同様に前処理をいかに丁寧にできるかということも重要なのです。
今回は回帰分析とデータの前処理について説明いたしました。
当社では機械学習を用いたデータ分析を
・numpy (数値計算のライブラリ)
・Pandas(データ解析を支援するライブラリ)
・Matplotlib(グラフを描くライブラリ)
・scikitlearn(クラスタリング、回帰、次元削減、分類に使うライブラリ集)
を使って行います。
「当社(当店)の経営分析をしてほしい」
「顧客の特徴をつかんで販促キャンペーンの効果がある方にだけ、ダイレクトメールを送りたい」
「話だけ聞いてみたい」
という方はビデオサービスZOOMを使って20分の無料コンサルをすることができますので、是非ホームページのCONTACTページからお問い合わせください
(通常コンサルは30分5,000円です)。
小平でホームページ制作、経営コンサルティング
mocal design 佐藤 大樹
東京都小平市南町1-27-10
✉ info@ofb.jp
☟トップページはこちらから