Net akış
Bir istasyondan çıkan bisiklet sayısı gelen sayısından fazlaysa istasyon boşalır; tersi doluysa yer kalmaz. İşletme ekibi günde iki tur kamyonetle bisikletleri yeniden dağıtır (bk_rebalancing). Hangi istasyonların kronik olarak boşaldığını net akış = gelen − giden ile bulursun.
bk_rebalancing ile yan yana koyarsan hangi istasyonun kamyonete bağımlı olduğunu görürsün.Net akışı iki ayrı toplamın birleşimiyle yazmak, büyük tabloyu OR koşuluyla birleştirmekten çok daha hızlıdır:
WITH cikis AS (SELECT start_station AS st, COUNT(*) AS n FROM bk_trips GROUP BY start_station),
giris AS (SELECT end_station AS st, COUNT(*) AS n FROM bk_trips WHERE end_station IS NOT NULL GROUP BY end_station)
SELECT s.name, COALESCE(g.n, 0) - COALESCE(c.n, 0) AS net
FROM bk_stations s
LEFT JOIN cikis c ON c.st = s.station_id
LEFT JOIN giris g ON g.st = s.station_id
ORDER BY net
LIMIT 5;
Veri kalitesi
Büyük sistemlerde veri hatası kaçınılmazdır. İki kontrol:
- Kapanmamış yolculuk:
ended_atboş; kilit sinyali gelmemiş ya da bisiklet kaybolmuş olabilir. - Aynı bisiklet aynı anda iki yolculukta: aralıkları çakışan iki yolculuk aynı
bike_id’yi taşıyorsa ya kayıt hatası ya da bisiklet kimliği yanlış okunmuştur. Pedal İzmir'de bilerek bırakılmış tam 25 çakışan çift var. Bu kontrol büyük tabloda kendine birleştirme gerektirir; önce dar bir tarih aralığında dene.
Derinleş: Yeniden dağıtım ve istasyon doluluk baskısı
Paylaşımlı bisiklet sistemlerinin en pahalı operasyonel kalemi yeniden dağıtımdır (rebalancing). Kamyonetler dolu istasyonlardan bisiklet alıp boş istasyonlara taşır. Kullanıcı için iki kötü an vardır: istasyonda bisiklet bulamamak ve bisikleti bırakacak yer bulamamak. İkisi de gelir kaybı ve şikâyet demektir.
bk_rebalancing tablosundadır: üç ayda 7.422 yükte 28.180 bisiklet. İstasyon net akışı ile kamyonet net akışı neredeyse birebir ters orantılıdır (korelasyon −0,99). Yani net akış buradaki dengeleme ihtiyacını gerçekten gösterir.Ham net akış yetmez: kapasiteye böl
Üç ayda −700 net akış, 30 yuvalı bir istasyon için yönetilebilir olabilir, 15 yuvalı bir istasyon için ise her gün boşalmak demektir. Karşılaştırılabilir ölçü doluluk baskısıdır: günlük ortalama net akış ÷ kapasite. Alsancak Çarşı (15 yuva) günde ortalama 7,7 bisiklet kaybediyor; baskısı −0,51. Yani her gün kapasitesinin yarısı kadar bisiklet getirilmesi gerekiyor.
Günün saatine göre akış
Toplam net akış, gün içindeki dalgalanmayı gizler. Konut bölgesindeki bir istasyon sabah boşalır, akşam dolar. Merkezdeki bir istasyonda tersi olur. Aşağıdaki sorgu iki istasyonun çıkış ve girişlerini UNION ALL ile tek bir akış listesine çevirir. Bu yöntem 116.500 satırlık tabloyu yalnızca iki kez tarar ve OR içeren birleştirmelerden çok daha hızlıdır:
WITH akis AS (
SELECT start_station AS st, CAST(strftime('%H', started_at) AS INTEGER) AS saat, -1 AS d
FROM bk_trips WHERE start_station IN (12, 51)
UNION ALL
SELECT end_station, CAST(strftime('%H', started_at) AS INTEGER), 1
FROM bk_trips WHERE end_station IN (12, 51)
),
h AS (
SELECT st,
CASE WHEN saat BETWEEN 7 AND 9 THEN '1 sabah 07-10'
WHEN saat BETWEEN 16 AND 19 THEN '3 akşam 16-20'
ELSE '2 diğer' END AS dilim,
SUM(d) AS net
FROM akis
GROUP BY st, CASE WHEN saat BETWEEN 7 AND 9 THEN '1 sabah 07-10'
WHEN saat BETWEEN 16 AND 19 THEN '3 akşam 16-20'
ELSE '2 diğer' END
)
SELECT s.name, h.dilim, h.net, ROUND(h.net / 92.0, 1) AS gunluk
FROM h JOIN bk_stations s ON s.station_id = h.st
ORDER BY s.name, h.dilim;
Göztepe Park sabah 07–10 arasında üç ayda 237 bisiklet kaybediyor (günde ~2,6), akşam ise az da olsa kazanıyor. Konut bölgesinden işe gidiş örüntüsü budur. Alsancak Çarşı'nın en büyük kaybı ise akşam 16–20 arasında (−342). Kamyonetin ne zaman nereye gideceğini bu tablo belirler: Göztepe'ye sabahtan önce, Alsancak'a öğleden sonra.
| Ölçü | Soru | Dikkat |
|---|---|---|
| Net akış | İstasyon boşalıyor mu? | Kapanmamış yolculukların bitişi yok (end_station IS NULL) |
| Doluluk baskısı | Ne kadar acil? | Payda: kapasite × gün sayısı (92) |
| Saatlik akış | Ne zaman müdahale? | Yolculuğun başlangıç saati, varış saatinden farklı olabilir |