Come ottimizzare i ricavi utilizzando la Tariffazione dinamica?

Come massimizzare i profitti tramite la Tariffazione dinamica?

Introduzione

I prezzi delle corse in fasce orarie di punta di Uber/Ola sono più alti rispetto alle tariffe regolari. In IRCTC, i prezzi dei treni Rajdhani aumentano all’aumentare del tasso di prenotazione, e su Amazon, i prezzi del prodotto esatto cambiano più volte. Chi decide quando cambiare questi prezzi o in che misura? Chi decide il prezzo giusto al momento giusto? Le risposte a queste domande rientrano nell’ambito della Dynamic Pricing. Questo articolo fornisce ai principianti risorse e comprensione teorica per costruire un algoritmo di pricing dinamico di base.

Obiettivi di apprendimento

  • Comprendere le basi del pricing e i diversi metodi di pricing
  • Approfondire il pricing dinamico, vantaggi-svantaggi, metodi, casi d’uso, ecc.
  • Principi fondamentali della gestione del fatturato.
  • Implementare un semplice algoritmo di pricing dinamico utilizzando Python per massimizzare il fatturato.

Questo articolo è stato pubblicato come parte del Data Science Blogathon.

Cos’è il ‘Prezzo’?

Ad agosto 2023, il prezzo delle cipolle era di Rs120 al chilogrammo. Cosa ha portato a questo? La carenza di offerta a causa di fattori ambientali esterni e una domanda costante. Il mercato, l’acquirente, il venditore, la domanda e l’offerta determinano il prezzo. Lo stesso vale per la maggior parte dei prodotti che compriamo e vendiamo oggi: biglietti del cinema, biglietti dell’autobus, commercio elettronico, carburante, ecc.

Nella teoria del prezzo, la domanda e l’offerta dettano i prezzi a cui si scambieranno beni e servizi. Quando i pagamenti dei consumatori per beni e servizi si allineano al costo marginale di produzione, si raggiunge il prezzo di mercato ottimale, anche detto punto di equilibrio tra domanda e offerta. Stabilire il prezzo giusto al momento giusto è essenziale per la crescita del business. Pertanto, i responsabili del pricing si concentrano nell’avvicinarsi al “Prezzo Corretto”, che può essere ottenuto attraverso i dati e l’analisi.

Fattori che influenzano il pricing

  • Fattori organizzativi: Disponibilità di stock del prodotto, vincoli di budget.
  • Mix di marketing: Stadio del ciclo di vita del prodotto, Prodotto, Prezzo, Luogo e Promozione.
  • Costo del prodotto: Costo di produzione e materie prime.
  • Domanda per il prodotto: Domanda per il prodotto o servizio.
  • Concorrenza sul mercato: I prezzi dei concorrenti determinano in larga misura i prezzi interni.

Cos’è il Dynamic Pricing?

Il dynamic pricing utilizza le tendenze recenti, il comportamento in tempo reale del cliente, l’offerta e la domanda e i prezzi della concorrenza per valutare il prezzo dei beni venduti. Consente di vendere merci a diversi livelli di prezzo, in modo tale che sia soddisfatta la soddisfazione del cliente e le aziende possano prosperare.

Il dynamic pricing viene adottato quando la domanda è elastica. Il dynamic pricing non può essere adottato quando la domanda è inelastica o perfettamente inelastica. Quando i clienti sono altamente sensibili alle variazioni di prezzo, c’è un’alta Elasticità Prezzo della Domanda, e questa proprietà viene sfruttata attraverso il DP.

Ad esempio – A Bangalore, quando c’è solo un autorickshaw disponibile in un determinato momento e luogo in una giornata di pioggia, un cliente disposto a pagare di più (il doppio o il triplo del prezzo corrente – prezzo elastico) lo otterrà, mentre un altro cliente che non è disposto a cedere dovrà prendere l’autobus BMTC dove i prezzi rimangono costanti (inelastico).

Quali sono gli obiettivi della Dynamic Pricing?

  • Aumentare i profitti, le entrate, la flessibilità, la quota di mercato e la soddisfazione dei clienti.
  • Ridurre la vecchia inventario, portando a una migliore utilizzazione degli spazi di magazzino e delle risorse.
  • Bilanciare l’offerta e la domanda.

Quindi, il successo della dynamic pricing è la massimizzazione di Ricavi / Profitti / Capacità / Quota di mercato / Soddisfazione del cliente. Esempio – Se nel 2021, senza dynamic pricing, sono state vendute 1 milione di unità e la traiettoria organica per il 2022 è di 1,5 milioni di unità. Con la dynamic pricing, le unità vendute dovrebbero aumentare a 2 milioni senza perdere il punteggio NPS del cliente o altri indici di pricing.

In parole semplici, l’aumento anno su anno dei ricavi e delle unità è la metrica di successo ultima di qualsiasi algoritmo di dynamic pricing.

Per un esperimento AB sulla dynamic pricing, le metriche di successo/risultato che possono essere considerate sono:

  • Valore medio dell’ordine (AOV)
  • Tasso di conversione (CR)
  • Ricavi per visitatore (RPV)
  • Percentuale di margine lordo (GMP)

Fattori che influenzano la Dynamic Pricing

  • Offerta: Quando l’offerta è inferiore, i prezzi sono più alti.
  • Domanda: Quando la domanda è maggiore, i prezzi sono più alti.
  • Livelli di inventario: I prezzi vengono abbassati se un inventario è vecchio e fuori moda. Esempio – vendita di liquidazione.
  • Preferenze dei clienti: Ola mini, prime, prime plus, ecc., hanno diverse fasce di prezzo.
  • Stagionalità e festività: I biglietti aerei durante le festività aumentano alle stelle e le aziende traggono profitto dalla forte domanda dei clienti.
  • Località: Le località turistiche hanno prezzi più alti.
  • Ora del giorno: I prezzi di mezzanotte sono più alti rispetto ai prezzi a mezzogiorno
  • Pricing dei concorrenti

Tipi di Dynamic Pricing

  • Pricing segmentato: Sconto studenti su Amazon Prime, sconto per anziani sui treni.
  • Pricing basato sul tempo: I prezzi degli hotel e dei voli in India sono più alti in ottobre/novembre (stagione festiva) rispetto ad agosto/settembre.
  • Pricing di punta: Surcharge su Uber/Ola
  • Il pricing è basato sui concorrenti.
  • Elasticità del prezzo: Più elastico è il prodotto, più adatto alla dynamic pricing. Tutti i prodotti FMCG sono prezzati in questo modo nei negozi Dmart/Reliance, ecc.

Revenue/Yield Management

Non si può parlare di pricing senza discutere del revenue management. Ottimizzare prezzo, inventario e distribuzione per prevedere la domanda e massimizzare il ricavo.

  • Il principale obiettivo del revenue management è vendere il prodotto giusto al cliente giusto al momento giusto al prezzo giusto e con un packaging adatto.
  • Segmentazione, previsione, ottimizzazione e pricing sono strumenti utilizzati nel revenue management.
  • Funziona meglio quando i prodotti/servizi sono elastici al prezzo.

Gli aspetti legali ed etici dell’IA e del ML sono poco discussi in India, quindi diamo un’occhiata.

  • La tarificazione dinamica inganna un cliente nel scegliere un prezzo che potrebbe non essere nel suo migliore interesse. Inoltre, potrebbe essere discriminatoria, quindi la domanda è: è legale?
  • In India, l’articolo 3 del Competition Act 2002 vieta la fissazione dei prezzi.
  • L’articolo vieta qualsiasi accordo tra o “pratica effettuata o decisione presa da qualsiasi associazione di imprese o associazione di persone, incluso il cartello, che opera nel medesimo o simile commercio di beni o prestazione di servizi”, che determina il prezzo di mercato.
  • Se due parti si accordano e stabiliscono prezzi molto simili o quasi identici, allora è illegale. Ma se una parte agisce senza il consenso dell’altra, allora nessuna delle due parti è responsabile.
  • La direzione corretta è quella di avere una legge fondamentale sulla protezione dei dati personali (simile a quella dell’UE) che protegge i cittadini indiani dalle pratiche predatorie delle aziende.

Problema

FlyAirportByAir è un servizio di taxi-elicottero a Bangalore che fornisce un servizio di taxi per l’aeroporto di Bangalore. Poiché la domanda è relativamente fluida e cambia in base al meteo, ai weekend e alle festività, vogliono introdurre una tarificazione dinamica per migliorare i ricavi. Scrivi una funzione di tariffazione ottimale che massimizzi il ricavo dato:

  • La prenotazione anticipata inizia 100 giorni prima
  • Il numero totale di posti disponibili al giorno è 100
  • La domanda varia tra 100 e 200 al giorno. Genera la domanda utilizzando un semplice codice Python -> np.random.randint(100, 200)
  • Per semplificare la tariffazione -> Prezzo = Domanda – Biglietti venduti

Dati i giorni rimanenti per la prenotazione, i posti totali disponibili e la domanda per il giorno, trova il prezzo corretto per ogni giorno.

## Variabili GlobaliDAYS = 100SEATS = 100DEMAND_MIN = 100DEMAND_MAX = 200

Prevedere la domanda è il primo passo per risolvere la tariffazione dinamica. La domanda varia con fattori interni ed esterni. La previsione delle serie temporali o i metodi di regressione possono essere utilizzati per prevedere la domanda futura.

demand_hist = [np.random.randint(DEMAND_MIN, DEMAND_MAX) for i in range(10000)]plt.hist(demand_hist, bins = 100)print("media", np.mean(demand_hist) )print("STD", np.std(demand_hist) 

La domanda è prevista utilizzando la funzione Random; il valore medio è di 150 posti al giorno e lo STD è di 28,9.

Esempio

Consideriamo questo esempio: D0 è la data del viaggio. Mentre le persone consolidano i loro piani di viaggio vicino alla data del viaggio, la domanda tende ad essere maggiore rispetto ai primi giorni (D8). Anche se la domanda di mercato per D0 è di 8, vengono prenotati solo 3 posti; i miei concorrenti occupano il resto.

Dato che la domanda è lineare, la rappresentazione Python della stessa:

def domanda_lineare(giorni_rimasti, posti_rimasti, livello_domanda):  biglietti_venduti_al_giorno = int(posti_rimasti/giorni_rimasti)    prezzo = livello_domanda - biglietti_venduti_al_giorno   ## posti_rimasti/giorni_rimasti è quasi 1.   return max(0,prezzo)#import csv

Funzione per calcolare il ricavo:

def cumu_ricavo(giorni_rimasti,             posti_rimasti,             funzione_tariffazione,             ricavo_a_data = 0,             domanda_min = DEMAND_MIN,             domanda_max = DEMAND_MAX):  if giorni_rimasti > 0 e posti_rimasti >0 :    domanda = np.random.randint(domanda_min, domanda_max+1)    p = funzione_tariffazione(giorni_rimasti, posti_rimasti,domanda )    q = domanda - p   # la domanda è lineare, Q sono i biglietti venduti    q = max(0,q)    q = min(posti_rimasti,q)  ## non posso vendere più biglietti di quelli disponibili    return q*p, p

Dato questa semplice funzione, calcoliamo il prezzo e il ricavo per – Un giorno prima del viaggio, e i biglietti totali rimasti sono 3. (Perché la domanda è scelta casualmente, i ricavi e il prezzo potrebbero variare, random.seed(10) può essere definito per ottenere risposte costanti tutto il tempo)

ricavo, p = cumu_rev(1, 3, linear_demand)print("Ricavo totale - ", ricavo)print("Prezzo per posto - ", p)

Dato questa semplice funzione, calcoliamo il prezzo e il ricavo per – Un giorno prima del viaggio, e il numero totale di biglietti rimasti è 10. Il prezzo per biglietto dovrebbe essere più alto perché la domanda è maggiore (da 3 a 10).

ricavo, p = cumu_rev(1, 10, linear_demand)print("Ricavo totale - ", ricavo)print("Prezzo per posto - ", p)#importa csv

Con una funzione di pricing semplice-lineare, è evidente che all’aumentare della domanda, aumenta anche il prezzo. Simuliamo questo e cerchiamo di ottimizzare la funzione di pricing.

Stimolazione Utilizzando Funzioni di Pricing

Testiamo questa semplice funzione per 10.000 simulazioni di prenotazione di posti utilizzando le funzioni di pricing 1. lineare_demand, 2. lineare_adj e 3. linear_opti_variable e scegliamo il miglior prezzo che dà il ricavo più alto, che è l’obiettivo di questo esercizio

1. lineare_demand

  • La domanda è prevista casualmente.
  • Il prezzo è la differenza tra la domanda e i biglietti venduti.
  • Quindi, se la domanda è più alta, anche il prezzo sarà più alto.
def lineare_demand(giorni_restanti, biglietti_restanti, livello_domanda):  biglietti_venduti_al_giorno = int(biglietti_restanti/giorni_restanti)  prezzo = livello_domanda - biglietti_venduti_al_giorno   ## biglietti_restanti/giorni_restanti è quasi 1.   return max(0, prezzo)#importa csv

2. linear_adj

  • La domanda è prevista casualmente.
  • Il prezzo è lineare ma a tratti. Viene introdotto un indice opti per ottimizzare la funzione precedente lineare_demand in una funzione a tratti. Quando la domanda è più alta, vengono prenotati più biglietti, il che aumenterà il ricavo.
  • OPTI è un valore fisso basato sulla domanda.
def lineare_adj(giorni_restanti, biglietti_restanti, livello_domanda):  """  Diciamo di aspettarci molto traffico/visualizzazioni e impressioni.   Se la domanda è elevata, addebitiamo di più a diverse tariffe  """  if livello_domanda > 180:    opti = 3    prezzo = livello_domanda - int((biglietti_restanti/giorni_restanti) + (opti*(livello_domanda/180)))  elif livello_domanda > 150:    opti = 2    prezzo = livello_domanda - int((biglietti_restanti/giorni_restanti) + (opti*(livello_domanda/180)))  elif livello_domanda > 100:    opti = 1    prezzo = livello_domanda - int((biglietti_restanti/giorni_restanti) + (opti*(livello_domanda/180)))  elif livello_domanda > 0:    opti = 0    prezzo = livello_domanda - int((biglietti_restanti/giorni_restanti) + (opti*(livello_domanda/180)))  return max(0, prezzo)#importa csv

3. linear_opti_variable

  • Simile al punto 2, viene utilizzato un indice OPTI, ma questo indice non è costante e come Kmeans, il valore ottimale di OPTI deve essere scelto in base alla curva del gomito.
def linear_opti_variable(giorni_restanti, biglietti_restanti, livello_domanda, opti = 1):  prezzo = livello_domanda - int((biglietti_restanti/giorni_restanti) + (opti*(livello_domanda/150)))  # prezzo = livello_domanda - int (biglietti_restanti/giorni_restanti)  ## se opti = 0 allora il secondo termine diventa 0  ## All'aumentare di opti, il secondo termine aumenta.   ## 150 perché in media la domanda è 150, (100+150)/2  ## SE la domanda è superiore a 150, allora il prezzo diminuirà  ## SE la domanda è inferiore a 150, allora il prezzo aumenterà.   return max(0, prezzo)

Funzione di reddito ricorsivo per calcolare il reddito cumulativo per tutte le 10,000 simulazioni:

def cumu_rev(days_left,             ticket_left,             pricing_function,             rev_to_date = 0,             demand_min = DEMAND_MIN,             demand_max = DEMAND_MAX):  if days_left > 0 and ticket_left >0 :    #random.seed(10)    demand = np.random.randint(demand_min, demand_max+1)    p = pricing_function(days_left, ticket_left,demand )    q = demand - p   # demand is linear Q is tickets sold    q = max(0,q)    q = min(ticket_left,q)  ## cannot sell more than tickets available    return cumu_rev(days_left = days_left-1,                    ticket_left =ticket_left-q,                    pricing_function = pricing_function,                    rev_to_date = rev_to_date+p*q)  else:    return rev_to_date

1. Output usando linear_demand:

simulation = [cumu_rev(DAYS, SEATS,linear_demand ) for i in range(10000)]plt.hist(simulation, bins = 100)print("media", np.mean(simulation) )print("STD", np.std(simulation) )plt.title("Ricavi per la prenotazione di 10.000 biglietti")

Il reddito medio basato sulla funzione linear_demand è di Rs14,908. Questo è evidente dall’istogramma.

2. Output usando linear_adj:

simulation = [cumu_rev(DAYS, SEATS,linear_adj ) for i in range(10000)]plt.hist(simulation, bins = 100)print("media", np.mean(simulation) )print("STD", np.std(simulation) )plt.title("Ricavi per la prenotazione di 10.000 biglietti")

Il reddito medio basato sulla funzione linear_adj è di Rs16,146. Questo è evidente dall’istogramma.

3. Output usando linear_opti_variable:

Il primo passo qui è scegliere il valore OTPI che fornisce il reddito più alto:

opti_mean = []for j in range(20):  simulation = [cumu_rev(DAYS, SEATS,partial(linear_opti_variable, opti= j) ) for i in range(10000)]  opti_mean.append(np.mean(simulation))  plt.plot(opti_mean)  plt.title("Valore ottimale per la massimizzazione del reddito")

def argmax(lst):  return lst.index(max(lst))print("Il miglior valore OTPI è -" ,list(range(20))[argmax(opti_mean)])>> Output >> Il miglior valore OTPI è - 1

Il migliore valore OTPI è 1 basato sulla curva del gomito. Ora cerchiamo il reddito per OTPI = 1.

simulation = [cumu_rev(DAYS, SEATS,partial(linear_opti_variable, opti = list(range(20))[argmax(opti_mean)]) ) for i in range(10000)]plt.hist(simulation, bins = 100)print("media", np.mean(simulation) )print("STD", np.std(simulation) )

Il reddito medio basato sulla funzione linear_adj è di Rs15,838. Questo è evidente dall’istogramma.

Valutazione delle funzioni di prezzo

Basato su Massimizzare il reddito, linear_adj è la migliore funzione di prezzo. FlyAirportByAir può testare questa funzione e in base all’esperimento AB, i suoi punti di forza e di debolezza possono essere valutati. Imparando da questo, si può migliorare le prestazioni nel tempo.

Conclusione

In diverse industrie come compagnie aeree, ferrovie, turismo, biglietteria, ecc., il DP è stato implementato con successo. Quando implementato correttamente, il dynamic pricing offre alle imprese flessibilità e una leva di crescita potenziale. Con gli aggiustamenti e gli ingredienti giusti, il DP produce una maggiore soddisfazione del cliente. Questo articolo fornisce una guida per principianti nel mondo del DP.

Punti chiave:

  • Il dynamic pricing mira a ottimizzare ricavi, profitti e soddisfazione del cliente.
  • I metodi utilizzati nel dynamic pricing variano da settore a settore.
  • I migliori metodi vengono scelti sulla base dei risultati AB, delle iterazioni e del miglioramento dell’algoritmo nel tempo.
  • Viene applicato solo quando esiste elasticità della domanda.

Buona fortuna! Ecco il mio profilo Linkedin se desideri connetterti con me o se vuoi aiutare a migliorare l’articolo. Sentiti libero di scrivermi su Topmate/Mentro; puoi inviarmi un messaggio con la tua domanda. Sarò felice di rimanere in contatto. Dai un’occhiata anche agli altri miei articoli su data science e analytics qui.

Domande frequenti

Riferimenti

  • Kaggle Mini Courses: Airline Price Optimization Microchallenge (https://youtu.be/irjpteecxdg?si=aUH2ifTekQutW-9n)
  • Coursera: Fundamentals of revenue management. (https://coursera.org/learn/fundamentals-of-revenue-management)
  • HBR Review: 7 Lessons on Dynamic Pricing (Courtesy of Bruce Springsteen) (https://hbr.org/2022/09/7-lessons-on-dynamic-pricing-courtesy-of-bruce-springsteen)
  • Dynamic Pricing Model using price multipliers for online bus ticketing platform. (https://www.krjournal.com/index.php/krj/article/view/38/357)
  • Dynamic Pricing Strategies for Multiproduct Revenue Management Problems (https://www0.gsb.columbia.edu/faculty/cmaglaras/papers/multi_rm.pdf)
  • Price Optimisation: From Exploration to Productionising (https://www.youtube.com/watch?v=wPxDibqdg_w)

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e sono utilizzati a discrezione dell’autore.