1Atari.com

Amazon商品を、単価の安い順に比較

容量が違っても、1Lあたり・1個あたりなどにそろえて、安い順に並べます。

1Atariの商品情報解析エンジンは、どうやって単価を揃えているのか

1Atariは、商品名の「×24」「15組」「6種アソート」などの表記から容量・個数・セット数を読み取り、単価を揃えています。読み取り間違いをユーザーの報告・AIチェック・人間の最終判定でどう改善しているかを、実例で説明します。

1Atariでは、自由に単語を入れて、商品の単価を比べられます。この記事は、1Atariのシステムを活用して、実際の商品の単価を比べた内容です。ページ下の検索ボックスから、気になる商品を自分でも比べられます。

(更新:) ・ 執筆:運営者

Amazonの商品ページには、内容量や個数が「500mL×24本」「5kg×2袋」「30枚×24個」のようにさまざまな形で書かれています。1Atariはこれらを読み取り、「500mL×24本=12L」のように、比べられる単位に直して単価を計算しています。

この商品情報の読み取りは、実はとても難しい作業です。この記事では、1Atariが商品情報をどう読み取っているのか、そして読み取りの間違いが見つかったとき、どう改善しているのかを説明します。

単価比較は、数字を割るだけではない

最も単純な例から始めます。

商品の表記計算の流れ
500mL × 24本500mL × 24 = 12L → 価格 ÷ 12L = 1Lあたりの価格
5kg × 2袋5kg × 2 = 10kg → 価格 ÷ 10kg = 1kgあたりの価格
30枚 × 24個30枚 × 24 = 720枚 → 価格 ÷ 720枚 = 1枚あたりの価格

ここまでは掛け算と割り算だけです。ただ、実際の商品名は書き方がそろっていません。「×24」「24個」「2個セット」「15組」「6種アソート」など、商品によって表記が違うため、数字を見つけて割るだけでは正しい単価になりません。

商品情報には、内容量のほかにも次のような数字が混ざっています。

1Atariの商品情報解析エンジンは、これらを区別して、商品の量にあたる数字だけを読み取っています。たとえば「60日分」や「1粒2000IU」は商品の量ではないので、内容量としては使いません。

読み取りを間違えることがあります

Amazonの商品名は、決まった書式で書かれているわけではありません。そのため、想定していなかった表記に出会って、読み取りを間違えることがあります。実際に、次のような例が見つかりました。

商品名の表記以前の読み取り本来の読み取り
2個ずつセット……6種アソート2個2個 × 6種 = 12個
30枚(15組) 24個30枚30枚 × 24 = 720枚

1つめは、「2個ずつ」が「6種類」入っている商品です。以前は「2個」だけを読み取ってしまい、合計の12個を認識できていませんでした。2つめは、30枚入り(15組)のパックが24個ある商品です。「×」が無く、間に括弧の補足もあるため、「30枚」だけを読み取り、「24個」と組み合わせられていませんでした。

こうした問題は、机の上でルールを考えているだけでは見つけにくいものです。実際の商品を使って初めて分かる問題があります。

間違いは、ユーザーの報告から見つかります

1Atariには、単価や商品情報がおかしいと感じたときに送れる「価格がおかしい?」の報告があります。報告された商品は、次の流れで確認されます。

  1. ユーザーが、おかしいと感じた商品を報告する
  2. 1Atariが読み取った商品情報(容量・個数・合計・単価)を確認する
  3. AIが、商品情報と読み取り結果を見比べてチェックする
  4. 人間が、実際の商品情報を見て最終判定をする
  5. 読み取り間違いと判定されたものを、改善候補として検討する
  6. 読み取りルールを改善する
  7. 修正後にテストをして、以前できていたことが壊れていないか確認する

先ほどの2つの例も、実際の報告から見つかったものです。

AIにも間違いがあります。最終判定は人間が行います

報告の確認には、AIによるチェックも使っています。ただし、AIの判定をそのまま正解とは扱いません。

AIにも誤判定があります。たとえば、AIが「問題なし」と判断していても、人間が実際の商品情報を確認すると、読み取りを間違えていると分かることがあります。逆に、AIが「問題がある」と判断しても、確認すると正しい読み取りだったこともあります。

そのため1Atariでは、AIを最終判定者にはしていません。AIは、商品情報と読み取り結果を確認する「もう一つのチェック役」です。AIの判定とは別に、人間が最終判定を行い、判定した理由も残します。AIの判定を人間の判定に上書きすることもありません。

人間は、報告された内容を次のように分類します。

このうち「商品情報の読み取り間違い」と判断されたものが、解析エンジンの改善候補になります。AIの誤判定が、そのまま解析エンジンの改善に混ざらないようにするための、一手間です。

1件だけ直すのではなく、ルールとして改善します

ここは、1Atariがとくに大事にしている考え方です。

ある商品で間違いが見つかったとき、「この商品は12個」と、その商品だけの答えを登録するようなことはしません。それでは、別の商品で同じ問題が起きたときに対応できないからです。

代わりに、「このような表記の商品を、どう読み取るべきか」というルールそのものを改善します。先ほどの例では、次のようなルールを加えました。

どちらも、特定の商品のためのルールではありません。同じような書き方をした別の商品にも使えるようにしています。

修正したら、以前できていたことも確認します

読み取りのルールを変えると、別の商品を間違えるようになる可能性があります。そのため、新しいルールを足すだけでは不十分です。

1Atariでは、見つかった問題を再現するテスト(回帰テスト)を追加します。そのうえで、以前から正しく読み取れていた商品も、あわせて確認します。たとえば次のような確認です。

確認すること表記の例
新しく読み取れるようになったこと「30枚(15組) 24個」「2個ずつ……6種アソート」
倍率として読み取ってはいけないもの「30枚 おまけ2個」「30枚(15組) 2個付き」(付属品の個数は、商品の個数ではない)
以前の読み取りが変わっていないこと「500mL × 48本 2ケース」「400枚(200組)3個パック×2個」

新しい問題を直しながら、以前の正しい動作を壊さない。この確認を、ルールを変えるたびに行っています。

情報が足りないときは、無理に計算しません

これも1Atariの大事な設計方針です。たとえば「60日分×3個」とだけ書かれている商品では、1個の中に何粒入っているのかが分かりません。「60日分」は使用期間であって、粒数ではないからです。

こうした場合、1Atariは推測で単価を出しません。比較の根拠を確定できない商品には、単価を表示しない方針です。また、内容量の候補が複数の情報から見つかって食い違っている場合も、どちらが正しいか判断できなければ、無理に単価を出しません。

使われることで、読み取りは改善していきます

1Atariの商品情報解析エンジンは、公開した時点で完成というものではありません。実際の商品には、想定していなかった表記がまだたくさんあります。

実際の商品、ユーザーの報告、AIによるチェック、人間による最終判定、ルールの改善、そして回帰テスト。この流れを、継続的に繰り返していきます。ただし、すべてが自動で直るわけではありません。ルールの変更は、人間が内容を確認し、テストを通したものだけを公開しています。

目標は、1つの商品を正しく計算できるようにするだけでなく、同じような問題を別の商品で起こさない仕組みにしていくことです。

問題が1Atari側とは限らない

単価が不自然に見える結果が出たとき、原因が必ずしも1Atariの読み取りにあるとは限りません。元になっているAmazonの商品情報そのものに、整合しない部分がある場合があります。

そのような場合も、1Atariが独自に「こちらが正しいはず」と判断して商品情報を書き換えることはしていません。まず元の商品情報を確認し、Amazon側の修正が必要と考えられる場合は、Amazonへの情報修正依頼につなげます。実際に見つかった事例は、別の記事「単価を計算していたら、Amazonの商品情報の不整合が見えてきた」で紹介しています。

1Atariが目指しているもの

1Atariが目指しているのは、Amazonの商品を並べるだけのサイトではありません。容量や個数が違う商品でも、「結局、どちらが割安なのか」を比べられるようにすることです。そのためには、商品情報を正しく読み取ることが欠かせません。

比較できる根拠があるときだけ単価を出す。間違いが見つかれば、ルールとして改善する。この方針で、商品情報解析エンジンを少しずつ育てています。表示価格だけでは比べにくい理由は「なぜスーパーでは同じ商品でも容量が違う?」でも説明しています。

1Atariでは、商品を検索すると内容量から計算した単価を確認できます。気になる商品を検索してみてください。