追跡データを活用したリアルタイム配達予定日の構築方法

お客様から最も多く寄せられる質問の一つが「荷物はいつ届きますか?」です。配送業者が提供する配達予定日は、曖昧だったり不正確だったりすることが少なくありません。リアルタイムの追跡イベントを分析することで、よりスマートで正確な配達予測を構築し、お客様への情報提供を充実させ、問い合わせの削減につなげることができます。

標準的なETAでは不十分な理由

ほとんどの配送業者が提供するETAは出荷時に設定されたまま更新されることがなく、以下のような要因が考慮されていません。

  • 国際配送における通関の遅延
  • 天候による輸送の混乱
  • 配送業者の仕分け施設の滞留
  • ラストマイル配送の課題

リアルタイムの追跡イベントを処理することで、荷物が配送ネットワークを移動するにつれて予測を動的に調整できます。

追跡イベントの収集設定

まず、WhereParcelのWebhookを使用して追跡更新を受信する設定を行います。

// Register a webhook for tracking updates
const response = await fetch('https://api.whereparcel.com/v2/webhooks', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    url: 'https://your-app.com/webhooks/tracking',
    events: ['tracking.updated', 'tracking.delivered'],
  }),
});

イベントを活用したETA計算

各追跡イベントにはステータス情報とタイムスタンプが含まれており、これらを使って配達予測を構築できます。

function calculateEstimatedDelivery(events, carrier, destination) {
  const latestEvent = events[0];

  // Base estimates by status
  const estimateMap = {
    'picked_up': { minDays: 2, maxDays: 5 },
    'in_transit': { minDays: 1, maxDays: 3 },
    'out_for_delivery': { minDays: 0, maxDays: 0 },
    'customs_clearance': { minDays: 1, maxDays: 7 },
    'arrived_at_destination': { minDays: 1, maxDays: 2 },
  };

  const estimate = estimateMap[latestEvent.status] || { minDays: 2, maxDays: 7 };

  const now = new Date();
  return {
    earliest: addBusinessDays(now, estimate.minDays),
    latest: addBusinessDays(now, estimate.maxDays),
    confidence: calculateConfidence(events),
  };
}

適応型予測モデルの構築

より正確な予測を行うためには、配送業者とルートごとの過去の配達実績を蓄積します。

// Store delivery times for completed shipments
async function recordDeliveryTime(shipment) {
  const pickupDate = shipment.events.find(e => e.status === 'picked_up')?.timestamp;
  const deliveryDate = shipment.events.find(e => e.status === 'delivered')?.timestamp;

  if (pickupDate && deliveryDate) {
    await db.deliveryTimes.insert({
      carrier: shipment.carrier,
      originCountry: shipment.origin.country,
      destinationCountry: shipment.destination.country,
      transitDays: daysBetween(pickupDate, deliveryDate),
      recordedAt: new Date(),
    });
  }
}

// Calculate average delivery time for a route
async function getHistoricalAverage(carrier, origin, destination) {
  const records = await db.deliveryTimes
    .find({ carrier, originCountry: origin, destinationCountry: destination })
    .sort({ recordedAt: -1 })
    .limit(100);

  if (records.length < 10) return null; // Not enough data

  const times = records.map(r => r.transitDays);
  return {
    average: Math.round(times.reduce((a, b) => a + b) / times.length),
    p90: percentile(times, 90),
    sampleSize: records.length,
  };
}

UIでの予測表示

配達予測を信頼度レベルとともに分かりやすく表示します。

function DeliveryEstimate({ estimate }) {
  const { earliest, latest, confidence } = estimate;

  if (confidence === 'high') {
    return (
      <div className="estimate high-confidence">
        <span>Expected delivery: {formatDate(earliest)}</span>
      </div>
    );
  }

  return (
    <div className="estimate">
      <span>
        Estimated delivery: {formatDate(earliest)} – {formatDate(latest)}
      </span>
      {confidence === 'low' && (
        <small>Estimate may change based on customs processing</small>
      )}
    </div>
  );
}

エッジケースへの対応

通関を伴う国際配送

通関処理は配達予測における最大の変動要因です。荷物が通関に入った場合は、予測の範囲を広げます。

if (latestEvent.status === 'customs_clearance') {
  // Customs can take 1-14 days depending on country
  estimate.latest = addBusinessDays(now, getCustomsEstimate(destination.country));
  estimate.confidence = 'low';
}

配達例外

追跡情報で配達失敗や例外が表示された場合は、それに応じて予測を更新します。

if (latestEvent.status === 'delivery_exception') {
  estimate.earliest = addBusinessDays(now, 1); // Next business day retry
  estimate.latest = addBusinessDays(now, 3);
  estimate.note = 'Delivery was attempted. The carrier will retry.';
}

追跡すべき主要指標

予測精度を継続的に向上させるために、以下の指標をモニタリングしましょう。

指標目標値説明
予測的中率> 85%予測期間内に配達された割合
平均誤差< 1日日数の平均絶対誤差
顧客問い合わせ数減少傾向配達時期に関するWISMOコールの件数
信頼度の校正適切高信頼度の予測は95%以上の確率で正確であること

まとめ

リアルタイムの追跡イベントと過去のデータを組み合わせることで、強力な予測システムを構築できます。

  1. 収集 — すべての配送に対して追跡Webhookを登録する
  2. 分析 — イベントを処理し、ステータスと過去のデータを使って予測を計算する
  3. 表示 — 適切な信頼度レベルとともに予測を表示する
  4. 学習 — 実際の配達実績を記録して将来の予測を改善する
  5. 通知 — 予測が大幅に変更された場合にお客様に通知する

このシステムをWhereParcelのマルチキャリア追跡APIの上に構築することで、500以上の配送業者にわたる一貫した追跡イベントを取得でき、グローバル規模で正確な予測を構築することが実現可能になります。

Webhookの設定について詳しくは、Webhook ベストプラクティスガイドをご覧ください。