技術ドキュメント

ガチスコ算出アルゴリズム(技術詳細)

ガチスコの計算方法を、数式・パラメータまで隠さず公開します。 考え方の概要はサイトコンセプト、 店舗ページの読み方は使い方ガイドをご覧ください。

0. 設計方針

ガチスコは、Googleマップのクチコミ評価から信頼できないものの影響を打ち消し、 実力に近い評価へ組み直した独自スコアです。設計上の前提は次の3点です。

  • Googleが表示する星別ヒストグラムは水増しの影響を受けているため、そのままは使わない
  • 正当な良店のスコアは下げず、水増しされた店だけを実力位置まで沈める
  • 全店舗を同一アルゴリズムで自動算出し、人手の調整・重み付けは一切加えない。

1. レビュー1件ごとの採用判定(非対称フィルタ)

各レビューが「スコアの根拠に使えるか」を、次の規則で判定します。 ★1〜3の低評価だけ本文要件を免除する非対称ルールが要点です。

  • ①除外:投稿者のクチコミ総数が2件以下のアカウントは、内容によらず常に除外します。
  • ②低評価は無条件採用:★1〜3であれば、本文が空でもそのまま採用します。
  • ③高評価は本文必須:★4〜5は、定型の付随句を除いた実質10文字以上の本文があり、 かつ返信・定型文パターンに該当しない場合のみ採用します。本文が空または「テキストなし」の場合は除外します。

なぜ非対称か:無言の★1〜3(黙って付けた低評価)まで切り捨てると、 ネガティブな声が過小評価され、スコアが実態より高く出ます。 水増しは高評価側で起きるため、本文要件は★4〜5にのみ課します。 投稿者のクチコミ総数はGoogleマップ上のそのアカウントの投稿件数で、量産アカウントは極端に少ない傾向があります。

2. 層化推定によるスコア算出

通過したレビューを単純平均するのではなく、星ごとの実数と通過率を分けて推定し、 掛け合わせてから平均します。中心となる式は次のとおりです。

星1つあたり「実数 × 通過率」を重みにして、星の値(1〜5)の加重平均を取ります。

ガチスコ = (★1×n₁×t₁ + ★2×n₂×t₂ + … + ★5×n₅×t₅) ÷ (n₁×t₁ + n₂×t₂ + … + n₅×t₅)

n_k は各星の「実数」(推定を含む)、t_k は各星のフィルタ通過率(0〜1)です。

2-1. 通過率 t_k の実測

DBに保有するその店舗のレビューを星ごとに束ね、各バケットでセクション1の採用判定を通る割合を実測します。

通過率 t_k =(星kのうち採用判定を通った件数)÷(星kの全件数)

サクラ相殺の核:水増し店は★5の実数 n₅ が膨らみますが、 同じ★5バケットに低品質な投稿が混ざるぶん通過率 t₅ が比例して下がります。 積 n₅·t₅ が真の信頼件数へ戻るため、 水増し分が自動的に打ち消されます。正当な高評価が多い店は t₅ が高いままなので沈みません。

2-2. 星別実数 n_k の求め方

  • n₁・n₂・n₃(低評価)=全数枚挙:低評価順にクチコミを辿り、 ★4が現れるまで数え切って厳密な実数を得ます。件数が少なく貴重な信号のため、 直近分だけでなく過去まで全件数えます。
  • n₄・n₅(高評価)=代数復元:Googleの総クチコミ数と表示平均という 2つの公開値から、次の連立式で逆算します(Googleのヒストグラムは使いません)。 ただしこの代数復元は、高評価を取り切れないほどクチコミが多い店だけで使います。 総クチコミ数が少なく★4〜5も全件手元にある店では、そもそも復元が不要(フィルタが 水増しを直接除ける)なため層化を行わず、単純平均へ切り替えます(後述の境界条件を参照)。

まず高評価の総数を、Googleの総クチコミ数から★1〜3の実数を引いて求めます。

高評価の総数 = 総クチコミ数 −(n₁+n₂+n₃)

この「高評価の総数」は n₄+n₅ に等しく、また表示平均から 4×n₄+5×n₅ = 表示平均×総クチコミ数 −(1×n₁+2×n₂+3×n₃)も成り立つので、 この2本の式を連立させて n₅・n₄ を逆算します。

n₅ = 表示平均×総クチコミ数 − (★1〜3の加重合計) − 4×高評価の総数

n₄ = 高評価の総数 − n₅

ただし n₅ が0未満または「高評価の総数」を超える場合はその範囲に収めます。 表示平均の丸めによる僅かな不整合を吸収するための処理です。

3. パラメータ・境界条件

  • アカウント除外閾値:投稿者のクチコミ総数が2件以下のアカウントは除外。
  • 本文の最小長:付随句を除いた実質10文字未満の★4〜5を除外。
  • 層化の適用下限:総クチコミ数が200件以下の店は層化を行わず単純平均へ。全件取得済みでフィルタが水増しを直接除けるため、代数復元は不要かつ表示平均の丸め等の誤差を持ち込むだけになるからです。
  • バケット最小サンプル:★5の実測が5件未満なら層化を諦め、従来の単純平均へフォールバック。
  • ★4の希薄化:★4が5件未満のときは★4と★5を併合した通過率をt₄に代用。
  • ★1〜3の空バケット:サンプル0の星は低評価併合の通過率、それも無ければ通過率を1.0とみなす。
  • N/A判定:分母(Σ n_k×t_k、フィルタ後の推定信頼件数)が10未満ならサンプル不足として「N/A」。評価が低い意味ではありません。

低評価順の全数枚挙に必要な情報が得られない店舗(新規・少数レビュー等)は、 この層化を行わず、通過したレビューの単純平均をガチスコとします。 この場合レビュー数が少ないほど高めに出やすく、件数が増えるにつれ本来値へ収束します。

4. 全体フロー

  1. その店舗のDB保有レビュー全件を取得し、★1〜3を全数枚挙します。
  2. 総クチコミ数が200件以下なら、全件取得済みでフィルタが直接効くため、層化を行わず通過レビューの単純平均を返します。
  3. 星ごとの通過率 t_k を実測します。★5の実測件数が5件未満なら、ここでも単純平均へ切り替えます。
  4. 高評価の総数(rest)=総クチコミ数 −(n₁+n₂+n₃)を求め、代数復元でn₅・n₄を算出します。
  5. 星別実数 n₁〜n₅ と通過率 t₁〜t₅ から、分母(Σ n_k×t_k)と分子(Σ k×n_k×t_k)を計算します。
  6. 分母が10未満なら「N/A」(サンプル不足)を返します。それ以外は分子÷分母を小数点2桁で丸めて返します。

この仕組みでも巧妙なステマを完全には見抜けませんが、 水増しの影響を機械的に打ち消す一つの目安として機能します。 各店舗ページでは、素のGoogle評価と並べて採用/除外の内訳も公開しています。

補足

  • 本ページはアルゴリズムの完全な開示を目的としています。実装の細部は予告なく改善されることがあります。
  • ガチスコはアルゴリズムによる自動算出であり、掲載店舗の品質を保証するものではありません。
  • ガチスコ ヘルスケアはGoogleマップの非公式サービスです。Googleとの提携・認定関係はありません。