Na czym to polega w sklepie
Funkcja np.searchsorted zwraca indeksy, gdzie elementy powinny trafić w posortowaną tablicę, żeby zachować porządek. Przy rosnącym cumsum(spend) szybko znajdziesz pierwszy dzień, gdy narastający wydatek przekroczył limit.
Przykład ze sklepu internetowego
Masz posortowane daty i skumulowany spend kampanii. Budżet cap: 20 000 PLN. Szukasz pierwszego indeksu po przekroczeniu:
import numpy as np
cumulative_spend = np.array([2000, 5500, 9800, 14200, 19800, 23500, 28100])
budget_cap = 20000
idx = np.searchsorted(cumulative_spend, budget_cap, side="left")
# idx=5 - pierwszy dzień gdy cumsum >= 20000 (wartość 23500)
days_over = len(cumulative_spend) - idx
Co zrobić po stronie biznesu
- Mapowanie AOV klienta na segment (progi posortowane) - bucket VIP bez if-else.
- Znalezienie percentyla przez searchsorted na posortowanym wektorze (szybki P90).
- Pułapka: tablica musi być posortowana rosnąco -
searchsortedna datach w losowej kolejności da bzdurę.
W skrócie
searchsorted to binsearch wektorowy. Łącz z cumsum do pacingu budżetu - jeden indeks zamiast pętli po dniach.