WED Engineering Blog
🐙

レシートの商品名から価格の予測

2024/10/17に公開

こんにちは!WED株式会社の機械学習エンジニアマシューです!よろしくお願いします。
今回はある商品名からその商品の価格を推論する事を簡単に紹介します!

皆さんはもうご存知かもしれませんが、レシート買取アプリONEでは、アップロードしていただいたレシートからOCRを用いて購買データを取得しています。写真の画質が悪かったりレシートが斜めになっていたりなど、様々な理由で上手く商品名に連携された価格が取れないことがあります。


例えば以下の例では、レシートが非常にくしゃくしゃになってしまった結果、商品購入数が数が商品の価格(100)と混ざってしまって、1円として登録してしまいました(信じられない割引か?!)

この場合どうしましょうか??手動で価格を確認して、直しますか?僅かなサンプルならできるけど、1億の商品の場合もちろん無理でしょうね?じゃ、機械学習に任せましょう!!

はじめに

お店に行って、「オーガニックりんご」や「高級ワイン」といった商品名を見ます。価格を知らなくても、それぞれの商品がどれくらいの値段かを予測できるかもしれません。りんごは数百円、ワインはもっと高いでしょうね。これが、価格予測モデルを作る基本的な考え方です。商品に関する情報(この場合は名前)を使って、その商品の価格を推測します。

ステップ1: 問題の理解

私たちは、商品の名前を読んだだけでその価格を予測できるモデル、つまり一種の仮想アシスタントを作りたいと考えています。このモデルは、商品名と価格の両方がわかっているたくさんの例を見て「学習」します。十分な例を見たら、今度は新しい商品に対しても良い予測ができるようになります。

ステップ2: モデルはどうやって学習するのか?

学習のプロセスは、私たちが価格を推測するのと似ています。例えば:

  • 商品の種類: 名前にあるいくつかの単語がヒントを与えてくれます。例えば、通常はお酒は生の野菜(もやしとか)よりコストが高いでしょう?
  • サイズや品質: 「オーガニック」「大きい」「プレミアム」といった単語は、価格が高いことを示すかもしれません。その上に同じ商品でも「6缶」や「24缶」とか「1個」や「10個」、このようなケースがよくあります。
  • 店名: 成城石井とまいばすけっととローソンは全てりんごを売ってるけど、店によって価格が違います!

モデルも同様に動作しますが、単語の意味を私たちのように「理解」しているわけではありません。代わりに、パターンを探します。

多くの例を通じてこれらのパターンを調べることで、モデルは時間が経つにつれてより良い予測を行うように調整されます。

ステップ3: モデルのトレーニングと評価

モデルを教えるためには、商品名と価格の両方が含まれた大量のデータセットが必要です。モデルはこのデータセットを以下のように学習します:

  1. 各商品名を確認する: 入力データを入れて、予測を行います。もし店舗名やジャンルなどの追加情報があれば、それも学習に役立てることができます!
    注:この記事の範囲外だけど、言葉を「トークン化」するということを少し説明しておきます。これは、言葉をモデルが理解しやすい数字の配列に変換するという意味です。

  2. 間違いから学習する: 予測が外れた後、モデルはその予測を実際の価格と比較します。間違っていた場合、モデルは今後より良い予測を行うために調整されます。このプロセスは数千回、または数百万回繰り返されます。
    注:これもこの記事の範囲外ですが、価格を0から1の範囲にスケーリングし、予測後に元のスケールに戻します。これは、外れ値の影響を減らすために役立ちます。(データのほとんどは数百円ですが、時々数千円以上の商品もあります!)

  3. まだ見えなかったで確認する:十分トレーニングを行なった後で、トレーニングの間全然みえなかったデータの予測を行って、予測と本当のバリューを比較して、精度を確認するためにいくつかの評価指標を計算します。特に、Mean Absolute Error (MAE: 何円の誤差があったか)とMean Absolute Percent Error(MAPE: 実際の価格に対して何パーセントの誤差があったか)を使用します!

例えば:
本当の価格:1000円
予測の価格:1100円
Absolute error: 100円
Percent error: 10%

実際の例

商品名:コカコーラゼロ500mllw
本当の値段:172円
OCRで登録した値段:1…(言うまでもない違いますね)
予測の値段:180円(もうちょっとだけど、悪くない!)

カテゴリー毎に分別して結果を計算して、特に難しいカテゴリーがあるけど、大体サンプルが多いと上手く予測できます!

難しい点

  • データセットの収集

    • トレーニングやテストを行う際には、多くのサンプルが必要で、それらが正確であることが望ましいです。
    • 問題なのは、元々のデータセットに多くの誤った値が含まれているから、完璧にクリーンなトレーニング/テストセットを集めるのが難しいことです。
    • データセットを手動でキュレーションすることは可能ですが、トレーニングに十分なサンプル数を手動で用意することはできません。
  • サンプルの不足

    • 果物、おにぎり、飲み物のようなよく売れる商品のサンプルはよくあるけど、自動車用品やペットフードのような珍しい商品のサンプルはそれほど多くないです。
  • 同じ商品でも異なる価格

    • 時期や特別な割引によって、商品の価格が変動することがあります。
    • その上に、異なるチェーンや地域間でも価格が異なる場合があります。

これらすべての問題には何らかの解決策がありますが、モデルを作成する際に注意すべき点です!

結論

簡単に言うと、価格予測モデルは、商品名に見られるパターンを学び、それがどの価格帯に関連しているかを理解します。一度トレーニングされると、そのパターンを使って新しい商品に対しても賢い推測を行います。常に完璧ではないかもしれませんが、人間の介入なしで迅速に価格を見積もる強力なツールになり得ます。

WED Engineering Blog
WED Engineering Blog

Discussion