見出し画像

【Kaggle Predict Future Sales|ECサイトの需要予測】未経験でもできる?研修1ヶ月でECデータ分析コンペに挑戦!

ESTYLEデータサイエンス事業部の「ながとも」こと長井です。

近年、「AI」や「DX」、「ビッグデータ」というワードをよく耳にするようになりました。それとともに「データサイエンティスト」という職種が注目されていることをご存知でしょうか?

データサイエンティストとはデータサイエンス力、データエンジニアリング力をベースにデータから価値を創出し、ビジネス課題に答えを出すプロフェッショナル
参照:一般社団法人データサイエンス協会

上記の定義を見てみても、具体的に何をする職種なのかイメージするのは難しいと思います。そこで、本記事では世界中のデータサイエンティストが腕を競い合う「Kaggle」というデータ分析のコンペを紹介します。

プログラミング未経験から1ヶ月で「Predict Future Sales」というコンペに挑戦した内容ですので、AIや機械学習に興味がある!挑戦してみたい!という方はぜひご覧ください。

1.コンペ概要

今回挑戦したコンペは「Predict Future Sales」です。いわゆる需要予測というものでAI活用が著しい領域の一つとなっています。需要予測ができるメリットとしては発注業務の効率化、在庫の適正化、来客数の予測などが挙げられ、その成果はイメージしやすいでしょう。

本コンペでは、ロシアのソフトウェア会社から提供された店舗/商品別の販売データを利用し、次月の販売数を予測することが目的です。世界中の大学の講義を受講できるオンラインサービス「Coursera」の最終課題として使用されたようです。

データセット

下記のデータを与えられた上で、コンペに取り組みます。

・sales_train.csv:学習データ
・test.csv:テストデータ
・sample_submission.csv:提出データのサンプル
・items.csv:商品マスタ
・item_categories.csv:商品カテゴリーデータ
・shops.csv:店舗マスタ

sales_train.csvとtest.csvを使用して学習を行い、sample_submission.csvの形式に合わせ予測の提出を行います。その他のデータはデータ理解の助けになります。

それではさっそく取り組んでいきます!

分析

2-1. 前処理
そもそも前処理とは何なのでしょうか?欲しいデータが手に入ったとして、そのまま使うことはできません。

欠けたデータがあったり、入力ミスがあったりするため綺麗に整えてあげる必要があります。データが汚いまま使ってしまうと予測精度が悪いモデルが出来てしまう可能性が高くなってしまうためです。

2-1-a. データクリーニング
・外れ値の除去

スクリーンショット 2022-01-01 16.22.27

外れ値とは他の値から大きく外れた値を指します。ただ、外れ値と外れ値ではない値の明確な違いがないのが現実です。

今回のケースもミスによる値なのか、正しい値なのか判断が難しいところですが、外れ値として除く処理をしました。丁寧に進めるのであれば、外れ値とした場合、外れ値ではないとした場合で予測の精度を比較をするのが良いでしょう。

・販売価格の修正
販売価格がマイナスのデータが見つかりました。価格がマイナスということはあり得ないので、同じ商品の販売価格の平均値に修正しました。データによって平均値とするのか中央値とするのか適宜判断する必要があります。

・表記揺れの統一
表記揺れとは一つの意味を表す言葉に、複数の表記がされていることを言います。「WEB」「Web」「ウェブ」のように表記揺れがあると文章が読みづらい、内容がわかりづらいので気をつけましょうと言った意味合いで主に使われます。

この表記揺れがデータ分析であると、データが全く別のものとして扱われてしまいます。今回のデータでも店舗名で表記揺れがあったため、一つの店舗が二つの別店舗として扱われているデータがありました。
とくに、データがロシア語で入力されていたため気付きづらくはありますが、些細な気づきが重要になってきます。

欠損値は含まれなかったので、基本的な処理はここまでです。

2-1-b. 特徴量エンジニアリング
ここからは、予測の精度を高めるために効果的な特徴量を作成していきます。そのためにはまずどのような特徴量が有効なのか、方向性を考えます。

予測対象は月次の販売数なので、与えられた日時販売データを月次データに集計し、販売数と関連のありそうな項目をグラフからみます(縦軸が販売数)。

スクリーンショット 2022-01-01 16.27.41

販売月との関係をみたところ、どうやら周期性がありそうです。また、12月の販売数が明らかに伸びていることがみてとれます。
時系列データの分析では4つの変動要素があります。

・傾向変動
長期間の基本的な変動傾向。
・ 循環変動
一定周期ではないが、周期的に繰り返される上下変動。
・ 季節変動
一年を基本的な周期とする規則的な変動。半年・四半期・月別を周期とする変動も含む。
・ 不規則変動
1〜3以外の変動。明確に説明できないような変動が含まれる。

変動要素を考えるには、要素に分解して考えると良いです。今回は季節変動によるところが大きいと考えられます。

スクリーンショット 2022-01-01 16.29.27

販売店舗、商品カテゴリーとの関係をみると、いずれも偏りがあることがみて取れます。把握できた内容から、以下の3点に着目して特徴量を作成する方針とします。

1. 店舗分類
2. 商品分類
3. ラグ特徴量(過去の実績値)

1. 店舗分類

スクリーンショット 2022-01-01 16.32.00

店舗に関するデータを見ると、店舗名がその店舗が位置する都市名から始まることがわかりました。

そこで、各店舗名から都市名を抽出、Label Encodingを行い特徴量としています。Label Encodingが何をしているかというと、都市名という文字列データはそのまま学習に使用することができないので、数値ラベルに変換してあげる必要があります。下の表のようなイメージです。

スクリーンショット 2022-01-01 16.32.15

今回は検討していませんが、モールやオンラインなどの規模感や販売形態を特徴量として作ることができれば有効かもしれません。

2.商品分類
商品カテゴリーに関するデータをみると、共通した文字が含まれることがわかりました。そこで、文字列を抽出し、新たな商品カテゴリーの分類を特徴量としています。こちらもLabel Encodingを行っています。

3.ラグ特徴量
今回のような時系列データでは、過去のデータが予測をする上で重要になってきます。

例えば、電車の乗客を予測したいとします。シンプルなラグ特徴量は○日前の乗客数ですが、過去3日間の乗客数の平均や毎週日曜日の乗客数のようなデータが有効であるかもしれないと考えるとイメージしやすいかもしれません。

具体例として、以下のような特徴量を作成しました。1ヶ月前の例のみあげていますが、3ヶ月前や6ヶ月前のデータも用意しています。

スクリーンショット 2022-01-01 16.34.42

2-2. モデルの検討
ここまで準備してきた特徴量を使用して、モデルの学習を行います。
予測モデルとしては、Kaggleで高スコアをだしている3つのモデルを検討しました。

・XGBoost
・LightGBM
・CatBoost

いずれもGBDTというアルゴリズムによるモデルで、以下の3つの概念がベースとなっています。

・勾配降下法
・Boosting
・決定木

詳細が気になる方は下記の記事を参照ください。
[入門]初心者の初心者による初心者のための決定木分析
GBDTの仕組みと手順を図と具体例で直感的に理解する

単純に3つのモデルをそれぞれ学習させ、予測結果を提出してみたところLightGBMがもっとも良い0.92383のスコアとなりました。スコアはRMSEを指標に評価されており、ここではRMSEの値が小さければ小さいほど誤差が小さいモデルと言える、程度の解釈で先に進みます。

スクリーンショット 2022-01-01 16.37.26

次に3つのモデルの平均値を予測としてみたところ0.90445と良いスコアとなりました。3人よれば文殊の知恵とは言いますが、それぞれのモデルの精度がそれほど高くはないとしても、組み合わせて用いることで精度が上がることがあります。

スクリーンショット 2022-01-01 16.37.44

簡単なモデルを試したに留まりますが、他にもニューラルネットワークや線形モデル、スタッキングなど検討の余地はまだまだあります。先程、特徴量エンジニアリングを行いましたが、実際どの特徴量が予測において重要であったかを確認しておきます。

スクリーンショット 2022-01-01 16.37.56

LightGBMについて確認すると重要度の高い順に以下の結果となりました。

1. 1ヶ月前の商品毎の平均販売数
2. 販売月
3. 商品カテゴリー
4. 1ヶ月前の店舗/商品カテゴリー毎の販売数
5. 1ヶ月前の販売数

着目した3つの項目が有効な特徴量となっていることが確認できました。

* 店舗分類
* 商品分類
* ラグ特徴量(過去の実績値)

これらの特徴量が重要なことは当たり前のようにも捉えられます。

しかし、計算から私たちの感覚と変わりない結果を導けることに、初学者の方は驚きを感じていただきたいです。さらに分析を通して予想もしなかったインサイトを獲得することができれば、ビジネスにおいては非常に強力であり、成長の大きな助けとなるはずです。

2-3. データ分割
機械学習を行う際には、学習を行うための学習データと未知のデータに適用したときのモデルを検証するためのテストデータを用意します。仮にそのまま「学習データを学習に、テストデータを検証に使う」とすると、「テストデータが学習に使えていない、学習データを検証に使えていない」問題が生じます。Kaggleでは一般的にk分割交差検証の手法を用いてこの問題を解消しています。

スクリーンショット 2022-01-01 16.42.46

しかし、今回のような時系列データでこの操作を行ってしまうと「未来のデータを学習する」という現実では起こり得ない現象が起きてしまいます。
そこで時系列データに基づいてデータを分割できるTimeSeriesSplitというクラスを用いて交差検証を行いました。

スクリーンショット 2022-01-01 16.42.55

結果は0.92098とスコアは悪化してしまいましたが、データ数が少ないために精度の悪い予測の影響が出ていると考えられます。当然のことですが、機械学習に取り組む上でデータの量が重要であることが実感できたポイントです。

3. まとめ

今回挑戦したKaggleコンペ「Predict Future Sales」のベストスコアはRMSEが0.90445で、2,372位/13,247人中という結果でした。

そもそも試したモデルが少ない、パラメータチューニングを行っていないなど、できていないことが多く改善の余地が大きいです。学習を始めて1ヶ月で本記事のレベル感の取り組みができるようになっています。AIや機械学習に興味のある方の学習を始めるきっかけになると嬉しいです。

採用情報

ESTYLEは「コウキシンが世界をカクシンする」という理念のもと、企業のDXを推進中です。経験・知識を問わず、さまざまな強みを持ったエンジニアが活躍しています。

「未経験文系からデータサイエンティストへ」

弊社では、スキルや経験よりも「データを使ってクライアントに貢献したい」「データ分析から社会を良くしていきたい」という、ご自身がお持ちのビジョンを重視しています。

ご応募・問い合わせはこちら

この記事が気に入ったらサポートをしてみませんか?