はじめに:送料無料ラインのジレンマ
ECを運営していると、一度は「送料無料ラインをいくらに設定すべきか」で悩むことがあると思います。「5,000円以上で送料無料」とするのか、「3,980円」にするのか、それとも全品送料無料にしてしまうのか。この数字ひとつで、客単価も利益も大きく変わってきます。
送料無料ラインには、はっきりとしたジレンマがあります。ラインを高めに設定すれば、「あと少しで無料になるなら、もう1点買おう」という心理が働き、客単価が上がりやすくなります。一方で、無料にした分の送料は店側が負担するわけですから、設定を間違えると一件ごとの利益が薄くなり、場合によっては赤字すれすれの注文が増えてしまいます。
さらに厄介なのは、ラインを高くしすぎると「そこまで買うものがない」とカゴ落ちが増える点です。客単価アップを狙ったつもりが、購入そのものを諦められてしまっては元も子もありません。
つまり送料無料ラインは、「客単価を上げたい」「利益を確保したい」「カゴ落ちを防ぎたい」という三つの要求のあいだで、ちょうどよい一点を探す作業になります。そして、このちょうどよい一点は、店ごとの購買データによってまったく違います。客単価が2,000円台の店と8,000円台の店では、最適なラインが同じわけがありませんよね。
この記事では、自店の購買データをBigQueryで分析し、送料無料ラインを感覚ではなく数字から設計していく考え方を紹介します。
なお、この記事で扱うSQLや数字は、考え方を示すための例です。実際のテーブル名・カラム名・金額は、お使いのカートシステムやデータ基盤に合わせて読み替えてください。
客単価の分布をBigQueryで分析する
送料無料ラインを考えるとき、まず見るべきは「平均客単価」ではなく「客単価の分布」です。平均はひとつの数字に丸めてしまうため、実際にどの価格帯に注文が集まっているのかが見えません。
たとえば平均客単価が4,000円だったとしても、その内訳が「2,000円の注文と6,000円の注文が半々」なのか「ほとんどが4,000円前後」なのかで、打つ手はまったく変わります。前者なら2,000円層を引き上げる余地がありますが、後者ならラインを少しずらすだけで反応が出るかもしれません。
注文金額のヒストグラムを作る
まずは注文単位の金額を、1,000円刻みのバケットに分けて件数を数えてみます。これが客単価の「山のかたち」を把握する出発点になります。
-- 注文金額を1,000円刻みでグループ化し、分布を見る
SELECT
FLOOR(order_amount / 1000) * 1000 AS price_bucket,
COUNT(*) AS order_count,
SUM(order_amount) AS bucket_revenue
FROM
`your_project.ec.orders`
WHERE
order_date BETWEEN '2026-01-01' AND '2026-06-30'
GROUP BY
price_bucket
ORDER BY
price_bucket;
price_bucket ごとの order_count を並べると、注文がどの価格帯に集中しているかが見えてきます。多くのECでは、現行の送料無料ラインのすぐ下と、すぐ上に小さな山ができていることがあります。「ラインのすぐ下で諦めた人」と「ラインを意識して上乗せした人」の両方が数字に出てくるわけですね。
累積で「割合」も把握する
件数だけでなく、「全体の何割の注文がいくら以下か」も見ておくと判断がしやすくなります。累積比率を出しておくと、「無料ラインを5,000円にすると、現状では全注文の何割が対象外になるのか」がひと目で分かります。
-- 価格帯ごとの件数と、累積比率を同時に出す
WITH bucketed AS (
SELECT
FLOOR(order_amount / 1000) * 1000 AS price_bucket,
COUNT(*) AS order_count
FROM
`your_project.ec.orders`
WHERE
order_date BETWEEN '2026-01-01' AND '2026-06-30'
GROUP BY
price_bucket
)
SELECT
price_bucket,
order_count,
ROUND(
SUM(order_count) OVER (ORDER BY price_bucket)
/ SUM(order_count) OVER (),
3
) AS cumulative_ratio
FROM
bucketed
ORDER BY
price_bucket;
cumulative_ratio が0.7のところの price_bucket を見れば、「全注文の7割はこの金額以下」という線が引けます。送料無料ラインの候補を、この分布の上に重ねて考えていくのが基本の流れです。
「あと少しで無料」を狙えるライン設計
分布が見えたら、次は「あと少しで無料になる」と感じてもらえる位置にラインを置けるかを考えます。
ポイントは、無料ラインを現状の客単価の山から「ほんの少し上」に置くことです。山のずっと上に置いてしまうと、多くのお客さんにとって無料ラインは遠すぎる目標になり、最初から諦められてしまいます。逆に山のすぐ下に置くと、ほとんどの人が何もしなくても無料になってしまい、客単価を押し上げる効果が出ません。
ラインまでの「あと少し」を数える
「現状の注文が、候補ラインまであといくら足りないのか」を見ると、上乗せを促せる余地があるかどうかが分かります。たとえば無料ラインの候補を5,000円としたとき、4,000〜4,999円の注文がどれだけあるかを確認します。
-- 候補ライン(5,000円)に対して「あと少し」の注文がどれだけあるか
SELECT
CASE
WHEN order_amount >= 5000 THEN 'over_line'
WHEN order_amount >= 4000 THEN 'near_miss' -- あと1,000円以内
ELSE 'below'
END AS line_position,
COUNT(*) AS order_count,
ROUND(AVG(order_amount), 0) AS avg_amount
FROM
`your_project.ec.orders`
WHERE
order_date BETWEEN '2026-01-01' AND '2026-06-30'
GROUP BY
line_position;
near_miss(あと1,000円以内)の注文がまとまった件数あるなら、その層に「あと1点でこの注文も送料無料」と伝えることで、客単価アップを狙える可能性があります。逆にこの層がほとんどいないなら、ラインの位置が分布とかみ合っていないサインです。候補ラインを1,000円下げて、もう一度同じクエリを回してみる、という試行を繰り返します。
よく一緒に買われる商品とセットで考える
「あと1点」を促すには、その金額帯に手ごろな商品があることも大切です。客単価の引き上げは、ラインの設定だけでなく、ラインのすぐ下の人が「ちょい足し」しやすい商品ラインナップとセットで効いてきます。送料無料ラインの分析と並行して、注文に含まれる商品の組み合わせも見ておくと、施策に厚みが出ます。
商品ごとの動きや、閲覧はあるのに売れていない在庫の見つけ方は、在庫回転率をGA4×BigQueryで可視化する記事で扱っているので、合わせて読んでみてください。
利益・カゴ落ちとのバランスを取る
客単価が上がっても、店側の送料負担が増えて利益が削られては意味がありません。ここで利益とのバランスを必ず確認します。
無料ラインごとの「負担額」を試算する
候補となる無料ラインをいくつか並べ、それぞれで「送料を店が負担する注文がどれだけ発生するか」「その負担額の合計はいくらか」を試算してみます。ここでは1件あたりの送料負担を仮に500円として計算します。
-- 無料ライン候補ごとの送料負担件数と負担総額を比較する
WITH lines AS (
SELECT line_value
FROM UNNEST([3000, 4000, 5000, 6000]) AS line_value
)
SELECT
l.line_value AS free_shipping_line,
COUNTIF(o.order_amount >= l.line_value) AS free_orders,
COUNTIF(o.order_amount >= l.line_value) * 500 AS estimated_shipping_cost
FROM
lines AS l
CROSS JOIN
`your_project.ec.orders` AS o
WHERE
o.order_date BETWEEN '2026-01-01' AND '2026-06-30'
GROUP BY
free_shipping_line
ORDER BY
free_shipping_line;
ラインを下げるほど free_orders が増え、estimated_shipping_cost も膨らみます。この負担額を、客単価アップで増えると見込める粗利と並べて比べるのが、利益面での判断材料になります。「送料負担は増えるが、それ以上に客単価が上がって粗利が出るか」という一点を見るわけですね。
カゴ落ちの観点を忘れない
最後に、ラインを上げすぎたときのカゴ落ちにも目を配ります。これはBigQueryの購買データだけでは見えにくく、カート投入から購入までの行動を追う必要があります。「カゴには入れたが、送料無料ラインに届かず離脱した」という動きは、購買データには注文として残らないため、注文テーブルだけ見ていると気づけません。
ラインを変更したら、変更前後で「カート投入数に対する購入完了数の比率」がどう動いたかを必ず確認します。客単価が上がっても、購入率が大きく下がっていれば、トータルの売上はむしろ減ってしまうこともあります。
ライン変更のような施策の前後比較を、毎回手作業でやると手間がかかります。施策のビフォーアフターを同じ条件で比べるためのテンプレートは、セール前後をGA4×BigQueryで比較する記事にまとめているので、こちらも参考にしてみてください。
まとめ
送料無料ラインは、なんとなくの相場や競合の真似で決めてしまいがちですが、本来は自店の購買データから設計できる数字です。この記事の流れを振り返っておきます。
- 平均ではなく客単価の分布を見る。1,000円刻みのヒストグラムと累積比率で「注文がどこに集まっているか」を把握する
- 無料ラインは客単価の山のほんの少し上に置き、「あと少しで無料」と感じてもらえる位置を探す
near_miss(あと一歩の注文)がまとまっているかで、ラインが分布とかみ合っているかを確認する- ラインを下げたときの送料負担額を試算し、客単価アップで増える粗利と並べて比べる
- 購買データだけでは見えないカゴ落ちは、ライン変更の前後で購入率の動きを必ず確認する
大切なのは、一度決めて終わりにしないことです。商品構成も季節も変われば、最適なラインも動きます。今回紹介したクエリを手元に置いておけば、四半期に一度くらいのペースで分布を見直し、ラインを調整していけます。
感覚で決めていた送料無料ラインを、自店の数字で説明できる状態に変えていく。その第一歩として、まずは客単価の分布を一度のぞいてみることをおすすめします。