Ana içeriğe geç
Kesit SQL
Orta · BT İş Analizi

Talebi anlamak: asıl sorun, görüşme soruları ve sorunu SQL ile boyutlandırmak

İstenen çözümün arkasındaki sorun, paydaş görüşmesi, geç teslimin sayısı ve maliyeti, kapsam içi ve dışı.

Uygulamada aç, 9 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Talep elimizde: “Geç teslim edilen siparişlerde müşteriye otomatik telafi kuponu verelim.” Bu cümle bir sorun değil, bir çözüm önerisidir. Kupon geç teslimi azaltmaz; olsa olsa sonucunu yumuşatır. İş analisti önce şunu sorar: hangi sorunu çözmeye çalışıyoruz?

Görüşmede ne sorulur?

Paydaş (stakeholder), işten etkilenen ya da işe karar veren kişidir. Burada müşteri hizmetleri, operasyon, finans ve pazarlama. Soruları açık uçlu sor, cevabı kendi önerinle kapatma.

AmaçSoruNeden?
SorunBunu şimdi istemenize ne yol açtı? Son olarak hangi şikâyet geldi?Gerçek olayı anlatır, varsayımı ayıklar
ÖlçüBu iş başarılı olursa hangi sayı nasıl değişir?Sonradan “işe yaradı mı?” sorusunu cevaplanabilir kılar
TanımSizin için “geç” kaç dakika? Saat ne zaman başlar?Ekipler aynı kelimeyle farklı şeyi kastedebilir
SınırKim kupon almamalı? Toplam bütçe nedir?İstisnaları ve kötüye kullanımı ortaya çıkarır
BugünŞu anda bu durumda ne yapıyorsunuz?Mevcut süreci ve elle yapılan işi gösterir
BedelHiç yapılmazsa ne olur?Önceliği dürüst tartışmayı sağlar
Yönlendirici soru sorma“45 dakika geç sayılır, değil mi?” sorusu cevabı sana verdirir. “Müşteri kaç dakikadan sonra geç kaldı der?” sorusu bilgi getirir.

Sorunu veriyle boyutlandır

Müşteri hizmetleri “çok şikâyet var” diyor. “Çok” bir sayı değil. Geçici bir çalışma tanımı alalım: sipariş verildikten teslime kadar 45 dakikayı (2.700 saniye) aşan teslimat geçtir. Bu tanım henüz karar değil, görüşmede sınanacak bir varsayım. Dönemi Ekim-Aralık 2024 olarak sabitleyelim. Süreyi saniyeyle hesaplıyoruz; nedenini bir sonraki derste göreceksin.

WITH t AS (
  SELECT order_id, customer_id, restaurant_id, courier_id, status, placed_at,
         ROUND((julianday(delivered_at) - julianday(placed_at)) * 86400) AS sure_sn
  FROM lk_orders
  WHERE placed_at >= '2024-10-01' AND placed_at < '2025-01-01'
)
SELECT status, COUNT(*) AS siparis,
       SUM(CASE WHEN sure_sn > 2700 THEN 1 ELSE 0 END) AS gec
FROM t
GROUP BY status
ORDER BY status;

Teslim edilen 6.637 siparişin 1.508 tanesi (%22,7) bu tanıma göre geç. Sayının yanında şunlar da çıktı: 356 iptal siparişin teslim zamanı yok, 35 iade edilmiş sipariş de 45 dakikayı aşmış. Bunlar birazdan gereksinim sorusu olacak.

Sorun nerede oluşuyor?

Kupon kararı vermeden önce gecikmenin kaynağına bak. Süreyi ikiye böl: hazırlık (sipariş → kuryenin alışı) ve yol (alış → teslim).

SELECT CASE WHEN ROUND((julianday(delivered_at) - julianday(placed_at)) * 86400) > 2700 THEN 'geç' ELSE 'zamanında' END AS durum,
       COUNT(*) AS siparis,
       ROUND(AVG((julianday(picked_at) - julianday(placed_at)) * 86400) / 60.0, 1) AS hazirlik_dk,
       ROUND(AVG((julianday(delivered_at) - julianday(picked_at)) * 86400) / 60.0, 1) AS yol_dk
FROM lk_orders
WHERE status = 'teslim' AND placed_at >= '2024-10-01' AND placed_at < '2025-01-01'
GROUP BY CASE WHEN ROUND((julianday(delivered_at) - julianday(placed_at)) * 86400) > 2700 THEN 'geç' ELSE 'zamanında' END;

Geç siparişlerde hazırlık 19,8, yol 33,2 dakika; zamanında olanlarda 14,1 ve 19,2. Fark en çok yolda. Araç türüne bakınca geç oranı bisiklette %48,6, arabada %34,1, motosiklette %21,0. Fırın Pizza'da oran %50,0. Bunu alıştırmalarda kendin hesaplayacaksın.

Sayının söylemediğiVeride mesafe yok. Bisikletin gecikmesi araçtan değil, bisikletlerin daha uzak ya da daha yoğun bölgede çalışmasından da gelebilir. Bu yüzden toplantıya “bisiklet yavaş” diye değil, “bisikletli teslimatlarda geç oranı iki kattan fazla, nedeni için mesafe verisine ihtiyacımız var” diye gidersin.

Kupon gerçekten ne sağlar?

Talebin varsayımı şu: geç teslim alan müşteri kaçıyor. Veride bunun izine bak. Ekim-Kasım teslimatlarından sonraki 30 gün içinde yeniden sipariş veren müşteri payı, geç teslimlerde %84,9, zamanında olanlarda %86,4.

WITH s AS (
  SELECT order_id, customer_id, placed_at,
         CASE WHEN ROUND((julianday(delivered_at) - julianday(placed_at)) * 86400) > 2700 THEN 'geç' ELSE 'zamanında' END AS durum
  FROM lk_orders
  WHERE status = 'teslim' AND placed_at >= '2024-10-01' AND placed_at < '2024-12-01'
)
SELECT durum, COUNT(*) AS teslimat,
       ROUND(100.0 * SUM(CASE WHEN EXISTS (
         SELECT 1 FROM lk_orders n
         WHERE n.customer_id = s.customer_id AND n.placed_at > s.placed_at
           AND (julianday(n.placed_at) - julianday(s.placed_at)) * 86400 <= 2592000
       ) THEN 1 ELSE 0 END) / COUNT(*), 1) AS donus_yuzde
FROM s
GROUP BY durum;

Fark küçük. Müşteri puanı ise belirgin düşüyor: geç teslimlerde kurye puanı ortalaması 3,86, diğerlerinde 4,41. Dürüst özet: geç teslim memnuniyeti düşürüyor; yeniden siparişe etkisi bu veride küçük görünüyor. Bu gözlemdir, neden-sonuç kanıtı değildir ve kuponun getirisini garanti etmez. Bunu talep sahibine söylemek senin işindir. Kupon yine yapılabilir, ama başarı ölçüsü buna göre yazılır.

Başarı ölçüsü: sayı, kaynak, hedef, süre

“Şikâyetler azalsın” ölçü değildir. Ölçü dört şeyi söylemeli: nereden başlıyoruz, başlangıç sayısı nereden geliyor, hedef kaç, ne zaman bakacağız.

ÖlçüBaşlangıç değeri ve kaynağıHedefSüreSahibi
Ana ölçü: pilot grupta geç teslim şikâyeti sayısıGeçişten önceki 8 haftanın sayısı; müşteri hizmetleri kayıtlarından alınacak. Bu veri uygulamada yok.%20 azalmaGeçişten sonraki 8 hafta, pilot dışı grupla karşılaştırmalıMüşteri hizmetleri
Yan ölçü: geç teslimlerde ortalama kurye puanı3,86; Ekim-Aralık 2024, bu uygulamadaki veriDüşmemesi yeterliAynı 8 haftaOperasyon

%20 hedefi veriden çıkmadı: talep sahibiyle konuşulup yazılan bir hedeftir ve başlangıç sayısı gelince gözden geçirilir. Başlangıç değeri olmayan ölçüyü kabul etme: açık soru olarak yaz, sahibini ve tarihini koy.

Bedeli ne kadar?

Görüşmeden çıkan tutar önerisi: 45-60 dakika arası 30 TL, 60 dakikayı aşan 60 TL. Bu kuralla dönemin kupon bedeli üst sınırda 51.900 TL. Karşılaştırma için aynı dönemde teslim edilen siparişlerin sepet toplamı 3.391.530 TL. Üst sınır diyoruz, çünkü her kupon kullanılmayabilir ve bir aylık sınır gelebilir.

Kapsamı çiz

Kapsam içiKapsam dışı (bu sürümde)
Teslim edilmiş siparişte süre hesabı ve kupon üretimiGeç teslimi azaltacak kurye ve restoran iyileştirmeleri
Kuponun müşteriye bildirilmesiKuponu ödeme ekranında kullanma ekranının yeniden tasarımı
Operasyon için kupon raporuRestoranı kupon bedeline ortak etme (ayrı talep)

Kapsam dışı listesi en az kapsam içi kadar değerlidir. “Bunu kastetmemiştik” tartışmasını baştan keser. Çıktın tek sayfalık talep özetidir: sorun, kanıt sayıları, başarı ölçüsü, kapsam, açık sorular.

Alıştırmalara geç (9)