Logotipo de Zephyrnet

Resolver asignaciones de estudios de casos de negocios

Fecha:

Introducción

Transporte y logística, alimentos y compras, pagos, necesidades diarias, negocios, noticias y entretenimiento, Gojek, una empresa indonesia, lo hace todo a través de una aplicación móvil que aporta más de $ 7 mil millones a la economía. Tiene 900 mil comerciantes registrados, más de 190 millones de descargas de aplicaciones y más de 2 millones de conductores que entregan más de 180 mil pedidos en un lapso de 120 minutos. ¡Es un gigante! Usando analítica de negocio, estaremos resolviendo un caso de estudio. A continuación se muestra el último de los más de 20 servicios que ofrece:

Análisis de negocios | Caso de negocio | Estudio de caso | Negocio
https://www.gojek.io/blog/food-debarkation-tensoba
  • Transporte y Logística
    • Go-ride – Tu taxi de dos ruedas, el indígena Ojek
    • Go-car – Comodidad sobre ruedas. Siéntate. Dormir. Ronquido.
    • Go-send: envíe o reciba paquetes en cuestión de horas.
    • Go-box - ¿Mudarse? Haremos las pesas.
    • Go-bluebird: viaja en exclusiva con el Bluebird.
    • Go-transit: su asistente de viaje, con o sin Gojek
  • Comprando comida
    • Go-mall: compre en un mercado en línea
    • Go-mart – Entrega a domicilio desde tiendas cercanas
    • Go-med: compre medicamentos, vitaminas, etc. en farmacias autorizadas.
  • Pagos
    • Go-pay: deja la billetera y deja de usar efectivo
    • Go-bills: pague facturas de forma rápida y sencilla
    • Paylater: ordene ahora y pague después.
    • Go-pulsa: datos o tiempo de conversación, recarga sobre la marcha.
    • Go-sure: asegure las cosas que valora.
    • Go-give: dona para lo que importa, toca vidas.
    • Go-investasi: invierta inteligentemente, ahorre mejor.
  • Necesidades diarias
    • GoFitness permite a los usuarios acceder a ejercicios como yoga, pilates, pound fit, barre, muay thai y zumba.
  • Empresa
    • Go-biz: una #SuperApp comercial para administrar y hacer crecer el negocio.
  • Noticias y entretenimiento
    • Go-tix: reserve su espectáculo, salte la cola.
    • Go-play – App para películas y series.
    • Go-games: tendencias de consejos de juego, etc.
    • Go-news: noticias destacadas de los principales agregadores.

Los datos generados a través de estos servicios son enormes y el equipo de GO tiene soluciones de ingeniería para abordar los problemas cotidianos de ingeniería de datos. Equipo central de análisis y ciencia(REPARTO) permite que múltiples productos dentro del ecosistema de Gojek utilicen de manera eficiente la gran cantidad de datos involucrados en el funcionamiento de la aplicación. El equipo cuenta con analistas, científicos de datos, ingenieros de datos, analistas comerciales y científicos de decisiones que trabajan en el desarrollo de soluciones internas de análisis profundo y otros sistemas de ML.

Análisis central de GoJek del equipo de ciencia de datos | Análisis de negocios | Caso de negocio | Estudio de caso | Negocio
https://www.gojek.io/blog/working-in-the-central-analytics-and-science-team

El papel de los analistas se concentra en resolver los problemas comerciales cotidianos, tener un buen conocimiento comercial, crear impacto, obtener conocimientos, RCA (análisis de causa raíz) y mantener informada a la alta gerencia sobre micro y macro métricas y decisiones de productos. para hacer frente a los problemas empresariales.

OBJETIVOS DE APRENDIZAJE

  • RCA sobre impulsores de crecimiento y vientos en contra que enfrentan las organizaciones.
    • Uso de Pandas para EDA, corte y corte en cubitos.
  • Optimización del presupuesto de marketing
    • Beneficios como la métrica de la estrella polar (métrica L0)
    • Usando el solucionador Pulp para resolver LP.
    • Escribiendo problemas de LP usando Pulps con instrucciones claras y nítidas.
  • Regresión lineal y validación cruzada
    • Ejercicio de regresión simple siguiendo los pasos proporcionados en el cuestionario.

Este artículo fue publicado como parte del Blogatón de ciencia de datos.

Tabla de contenidos.

Planteamiento del problema

Parte I

Los directores de GOJEK han pedido a los analistas de BI que analicen los datos para comprender qué sucedió durante el primer trimestre de 1 y qué deben hacer para maximizar los ingresos en el segundo trimestre de 2016.

  • Dados los datos del problema A, ¿cuáles son los principales problemas en los que debemos centrarnos?
  • Dados los datos de la tabla B, ¿cómo maximizará la ganancia si solo tenemos un presupuesto de IDR 40,000,000,000 XNUMX XNUMX XNUMX?
  • Presente sus hallazgos y soluciones concretas para una reunión de gestión.

Parte II

  • Problema Usando una regresión lineal múltiple, prediga el total_cbv.
  • Cree 1 modelo para cada servicio.
  • Período de pronóstico = 2016-03-30, 2016-03-31 y 2016-04-01
  • Período de tren = el resto Lista de predictores a utilizar:
    • Dia del mes
    • Mes
    • Día de la semana
    • Indicador de fin de semana/día de la semana (fin de semana = sábado y domingo)
  • Preprocesamiento (hazlo en este orden):
    • Quitar GO-TIX
    • Conservar solo order_status `Cancelado`
    • Asegúrese de que estén presentes las combinaciones completas (producto cartesiano) de fecha y servicio
    • Imputar valores faltantes con 0
    • Crear predictor de bandera is_weekend (1 si sábado/domingo, 0 si otros días)
    • Predictores de mes y día de la semana de codificación instantánea
    • Estandarice todos los predictores en puntuaciones z utilizando solo la media y la desviación estándar de los datos del período de entrenamiento
  • Métrica de evaluación: MAPE Validación: Esquema triple. Cada pliegue de validación tiene la misma duración que el período de pronóstico.
  • Pregunta 1: después de todos los pasos de preprocesamiento, ¿cuál es el valor de todos los predictores para servicio = GO-FOOD, fecha = 2016-02-28?
  • Pregunta 2: muestra las primeras 6 filas de variables codificadas one-hot (mes y día de la semana)
  • Pregunta 3: imprima las primeras 6 filas de los datos después del procesamiento previo para el servicio = GO-KILAT. Ordenar ascendentemente por fecha
  • Pregunta 4: calcule el MAPE del período de pronóstico para cada servicio. Mostrar en orden ascendente basado en el MAPE
  • Pregunta 5: cree gráficos para mostrar el rendimiento de cada pliegue de validación. Un gráfico un servicio. x = fecha, y = total_cbv. Color: negro = total_cbv real, otros colores = las predicciones de pliegue (debe haber otros 3 colores). Solo muestra el período de validación. Por ejemplo, si las filas 11, 12 y 13 se usaron para validaciones, no muestre las otras filas en los gráficos. Muestra claramente el mes y la fecha en el eje x

Parte III

Nuestro servicio GO-FOOD en Surabaya funcionó muy bien el mes pasado: tuvieron un 20 % más de pedidos completados el mes pasado que el mes anterior. El gerente de GO-FOOD en Surabaya necesita ver lo que está sucediendo para mantener constantemente este éxito durante el próximo mes en adelante.

  • ¿Qué métodos cuantitativos usaría para evaluar el crecimiento repentino? ¿Cómo evaluaría el comportamiento de los clientes?

Conjunto de datos

La solución a la primera parte

Antes de comenzar a resolver, comience a investigar blogs y documentos técnicos que están presentes en el sitio web de la empresa (los enlaces se agregan a continuación). Los archivos de la empresa proporcionan recursos útiles que actúan como guías y ayudan a comprender lo que representa la empresa o lo que la empresa espera de este rol. Las preguntas uno y tres pueden considerarse problemas abiertos. La pregunta dos es un ejercicio simple de regresión, que no se enfoca necesariamente en el mejor modelo, sino que se enfoca en los procesos involucrados en la construcción de un modelo.

RCA sobre impulsores de crecimiento y vientos en contra que enfrentan las organizaciones

Datos de importacion:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
#import csv sales_df =pd.read_csv('https://raw.githubusercontent.com/chrisdmell/Project_DataScience/working_branch/09_gojek/sales_data_all.csv') print("Shape of the df")
display(sales_df.shape) print("HEAD")
display(sales_df.head()) print("NULL CHECK")
display(sales_df.isnull().any().sum()) print("NULL CHECK")
display(sales_df.isnull().sum()) print("df INFO")
display(sales_df.info()) print("DESCRIBE")
display(sales_df.describe())
Análisis de negocios | Caso de negocio | Estudio de caso | Negocio

Cree pandas datetime a partir del formato de objeto. Pandas datetimes es un formato fácil para trabajar y manipular fechas. Derive la columna del mes a partir de la fecha y hora. Filtre también el mes 4 (abril). Cambie el nombre de los meses como Ene, Feb, March.

## convert to date time # convert order_status to strinf
## time_to_pandas_time = ["date"] for cols in time_to_pandas_time: sales_df[cols] = pd.to_datetime(sales_df[cols]) sales_df.dtypes sales_df['Month'] = sales_df['date'].dt.month sales_df.head() sales_df['Month'].drop_duplicates() sales_df[sales_df['Month'] !=4] Q1_2016_df = sales_df[sales_df['Month'] !=4] Q1_2016_df['Month'] = np.where(Q1_2016_df['Month'] == 1,"Jan",np.where(Q1_2016_df['Month'] == 2,"Feb",np.where(Q1_2016_df['Month'] == 3,"Mar","Apr"))) print(Q1_2016_df.head(1)) display(Q1_2016_df.order_status.unique()) display(Q1_2016_df.service.unique())
#import csv
"
"

A nivel de grupo, los ingresos totales han crecido un 14%. Este es un resultado positivo. Desglosemos esto por varios servicios e identifiquemos los servicios que funcionan bien.

revenue_total.sort_values(["Jan"], ascending=[False],inplace=True) revenue_total.head() revenue_total['cummul1'] = revenue_total["Jan"].cumsum()
revenue_total['cummul2'] = revenue_total["Feb"].cumsum()
revenue_total['cummul3'] = revenue_total["Mar"].cumsum() top_95_revenue = revenue_total[revenue_total["cummul3"]<=95 ] display(top_95_revenue)
ninety_five_perc_gmv = list(top_95_revenue.service.unique())
print(ninety_five_perc_gmv) top_95_revenue_plot = top_95_revenue[["Jan", "Feb", "Mar"]]
top_95_revenue_plot.index = top_95_revenue.service
top_95_revenue_plot.T.plot.line(figsize=(5,3)) ## share of revenue is changed but has the overall revenue changed for these top 4 services#import csv
cambio de ingresos | Análisis de negocios | Caso de negocio | Estudio de caso | Negocio
"
  • Durante los tres meses, Ride, Food, Shop y Send contribuyen a más del 90 % de participación en los ingresos netos (en enero, Ride contribuyó al 51 % de los ingresos netos).
  • Por lo tanto, siguiendo la regla 80:20 para el mes más reciente, podemos restringir este análisis a los 3 servicios principales, a saber, Ride, Food, Send.
  • De los 11 servicios disponibles, solo 3 contribuyen con más del 90% de los ingresos. Esto es motivo de preocupación y existe una inmensa oportunidad para que crezcan el resto de los servicios.

Viajes completados

## NET - completed rides
Q1_2016_df_pivot_cbv_4 = Q1_2016_df[Q1_2016_df["order_status"] == "Completed"]
Q1_2016_df_pivot_cbv_4 = Q1_2016_df_pivot_cbv_4[Q1_2016_df_pivot_cbv_4.service.isin(ninety_five_perc_gmv)] Q1_2016_df_pivot_cbv = Q1_2016_df_pivot_cbv_4.pivot_table(index='service', columns=['Month' ], values='total_cbv', aggfunc= 'sum')
# display(Q1_2016_df_pivot_cbv.head())
Q1_2016_df_pivot_cbv = Q1_2016_df_pivot_cbv[["Jan", "Feb", "Mar"]] for cols in Q1_2016_df_pivot_cbv.columns: Q1_2016_df_pivot_cbv[cols]=(Q1_2016_df_pivot_cbv[cols]/1000000000) display(Q1_2016_df_pivot_cbv) display(Q1_2016_df_pivot_cbv.T.plot()) ## We see that go shop as reduced its revenue but others the revenue is constant. Q1_2016_df_pivot_cbv_4 = Q1_2016_df_pivot_cbv
Q1_2016_df_pivot_cbv_4.reset_index(inplace = True) Q1_2016_df_pivot_cbv_4["Feb_jan_growth"] = (Q1_2016_df_pivot_cbv_4.Feb / Q1_2016_df_pivot_cbv_4.Jan -1)*100
Q1_2016_df_pivot_cbv_4["Mar_Feb_growth"] = (Q1_2016_df_pivot_cbv_4.Mar / Q1_2016_df_pivot_cbv_4.Feb -1)*100 display(Q1_2016_df_pivot_cbv_4)#import csv
Gojek completó paseos | Análisis de negocios | Caso de negocio | Estudio de caso | Negocio
servicios Gojek | Análisis de negocios | Caso de negocio | Estudio de caso | Negocio
"
  • Ride, que es el motor que impulsa los ingresos, ha crecido un 19 % (de enero a marzo) en comparación con Send, que ha crecido un 25 %.
  • La comida ha disminuido en un 7%, dado que la entrega de alimentos está creciendo en todo el mundo, y esta es una de las principales causas de preocupación.

Viajes cancelados (oportunidad perdida)

Q1_2016_df_pivot_cbv = Q1_2016_df[Q1_2016_df["order_status"] != "Completed"]
Q1_2016_df_pivot_cbv = Q1_2016_df_pivot_cbv.pivot_table(index='service', columns=['Month' ], values='total_cbv', aggfunc= 'sum')
Q1_2016_df_pivot_cbv = Q1_2016_df_pivot_cbv[["Jan", "Feb", "Mar"]] revenue_total = pd.DataFrame() for cols in Q1_2016_df_pivot_cbv.columns: revenue_total[cols]=(Q1_2016_df_pivot_cbv[cols]/Q1_2016_df_pivot_cbv[cols].sum())*100 revenue_total.reset_index(inplace = True)
display(revenue_total.head()) overall_cbv = Q1_2016_df_pivot_cbv.sum()
print(overall_cbv)
overall_cbv.plot()
plt.show() overall_cbv = Q1_2016_df_pivot_cbv.sum()
overall_cbv_df = pd.DataFrame(data = overall_cbv).T
display(overall_cbv_df) overall_cbv_df["Feb_jan_growth"] = (overall_cbv_df.Feb / overall_cbv_df.Jan -1)*100
overall_cbv_df["Mar_Feb_growth"] = (overall_cbv_df.Mar / overall_cbv_df.Feb -1)*100 display(overall_cbv_df) revenue_total.sort_values(["Jan"], ascending=[False],inplace=True) revenue_total.head() revenue_total['cummul1'] = revenue_total["Jan"].cumsum()
revenue_total['cummul2'] = revenue_total["Feb"].cumsum()
revenue_total['cummul3'] = revenue_total["Mar"].cumsum() top_95_revenue = revenue_total[revenue_total["cummul3"]<=95 ] display(top_95_revenue)
ninety_five_perc_gmv = list(top_95_revenue.service.unique())
print(ninety_five_perc_gmv)
Viajes cancelados | Análisis de negocios | Caso de negocio | Estudio de caso | Negocio
"
  • Los ingresos perdidos han crecido un 6%.
  • Los directores pueden aumentar sus esfuerzos para reducir esto a menos del 5%.

Análisis de Pedidos


Q1_2016_df_can_com = Q1_2016_df[Q1_2016_df.order_status.isin(["Cancelled", "Completed"])]
Q1_2016_df_can_com = Q1_2016_df_can_com[Q1_2016_df_can_com.service.isin(ninety_five_perc_gmv)] Q1_2016_df_pivot = Q1_2016_df_can_com.pivot_table(index='service', columns=['order_status','Month' ], values='num_orders', aggfunc= 'sum')
Q1_2016_df_pivot.fillna(0, inplace = True) multi_tuples =[ ('Cancelled', 'Jan'), ('Cancelled', 'Feb'), ('Cancelled', 'Mar'), ('Completed', 'Jan'), ('Completed', 'Feb'), ('Completed', 'Mar')] multi_cols = pd.MultiIndex.from_tuples(multi_tuples, names=['Experiment', 'Lead Time']) Q1_2016_df_pivot = pd.DataFrame(Q1_2016_df_pivot, columns=multi_cols) display(Q1_2016_df_pivot.columns)
display(Q1_2016_df_pivot.head(3)) Q1_2016_df_pivot.columns = ['_'.join(col) for col in Q1_2016_df_pivot.columns.values] display(Q1_2016_df_pivot)
#import csv Q1_2016_df_pivot["jan_total"] = Q1_2016_df_pivot.Cancelled_Jan + Q1_2016_df_pivot.Completed_Jan
Q1_2016_df_pivot["feb_total"] = Q1_2016_df_pivot.Cancelled_Feb + Q1_2016_df_pivot.Completed_Feb
Q1_2016_df_pivot["mar_total"] = Q1_2016_df_pivot.Cancelled_Mar + Q1_2016_df_pivot.Completed_Mar Q1_2016_df_pivot[ "Cancelled_Jan_ratio"	] =Q1_2016_df_pivot.Cancelled_Jan/Q1_2016_df_pivot.jan_total
Q1_2016_df_pivot[ "Cancelled_Feb_ratio"	]=Q1_2016_df_pivot.Cancelled_Feb/Q1_2016_df_pivot.feb_total
Q1_2016_df_pivot[ "Cancelled_Mar_ratio"	]=Q1_2016_df_pivot.Cancelled_Mar/Q1_2016_df_pivot.mar_total
Q1_2016_df_pivot[ "Completed_Jan_ratio"	]=Q1_2016_df_pivot.Completed_Jan/Q1_2016_df_pivot.jan_total
Q1_2016_df_pivot[ "Completed_Feb_ratio"	]=Q1_2016_df_pivot.Completed_Feb/Q1_2016_df_pivot.feb_total
Q1_2016_df_pivot[ "Completed_Mar_ratio" ] =Q1_2016_df_pivot.Completed_Mar/Q1_2016_df_pivot.mar_total Q1_2016_df_pivot_1 = Q1_2016_df_pivot[["Cancelled_Jan_ratio"
,"Cancelled_Feb_ratio"
,"Cancelled_Mar_ratio"
,"Completed_Jan_ratio"
,"Completed_Feb_ratio"
,"Completed_Mar_ratio"]] Q1_2016_df_pivot_1
Análisis de pedido | Análisis de negocios | Caso de negocio | Estudio de caso | Negocio
  • En marzo, Food, Ride, Send tuvieron el 17 %, el 15 % y el 13 % del total de pedidos cancelados, respectivamente.
  • Alimentos ha aumentado su tasa de finalización de pedidos, del 69% en enero al 83% en marzo. Esta es una mejora significativa.
## column wise cancellation check if increased
perc_of_cols_orders = pd.DataFrame() for cols in Q1_2016_df_pivot.columns: perc_of_cols_orders[cols]=(Q1_2016_df_pivot[cols]/Q1_2016_df_pivot[cols].sum())*100 perc_of_cols_orders perc_of_cols_cbv.T.plot(kind='bar', stacked=True)
perc_of_cols_orders.T.plot(kind='bar', stacked=True)
"
"
  • En marzo, de todos los viajes cancelados, Ride tiene el 72 % de los pedidos, seguido de Food (17 %) y Send (6 %).

Resumen de hallazgos y recomendaciones para Business Analytics

"
  • Paseo -
    • El principal contribuyente a los ingresos.
    • La cancelación (GMV) en marzo ha crecido un 42%
    • Reduzca las cancelaciones a través de la intervención del producto y las nuevas características del producto.
  • Comida -
    • Los pedidos cancelados han aumentado, pero debido a la optimización de costos, la pérdida de GMV se ha detenido con éxito.
    • Aumente los ingresos netos al reducir los costos y las cancelaciones.
    • Impulse una mayor adquisición de clientes.
  • Enviar -
    • GMV y pedidos cancelados, ambos se han visto afectados y son un motivo de gran preocupación.
    • Buena experiencia de finalización de viaje, por lo tanto, aumenta la retención y potencia el crecimiento de los ingresos a través de la retención.

Maximice las ganancias optimizando los gastos presupuestarios

El equipo de Negocios tiene un presupuesto de 40 mil millones para el segundo trimestre y ha establecido objetivos de crecimiento para cada servicio. Para cada servicio, el costo de 2 viajes incrementales y el objetivo de crecimiento máximo en el segundo trimestre se indican a continuación. Para Go-Box, conseguir 100 reservas más cuesta 2 millones y el objetivo de crecimiento máximo en el segundo trimestre es del 100 %.

Maximice las ganancias | Análisis de negocios | Caso de negocio | Estudio de caso | Negocio

Importe datos de presupuesto y use datos de ventas del análisis anterior.

budget_df =pd.read_csv('https://raw.githubusercontent.com/chrisdmell/Project_DataScience/working_branch/09_gojek/optimization_budge.csv') print("Shape of the df")
display(budget_df.shape) print("HEAD")
display(budget_df.head()) print("NULL CHECK")
display(budget_df.isnull().any().sum()) print("NULL CHECK")
display(budget_df.isnull().sum()) print("df INFO")
display(budget_df.info()) print("DESCRIBE")
display(budget_df.describe()) ## convert to date time # convert order_status to string
## time_to_pandas_time = ["date"] for cols in time_to_pandas_time: sales_df[cols] = pd.to_datetime(sales_df[cols]) sales_df.dtypes sales_df['Month'] = sales_df['date'].dt.month sales_df.head() sales_df['Month'].drop_duplicates() sales_df_q1 = sales_df[sales_df['Month'] !=4]
## Assumptions
sales_df_q1 = sales_df_q1[sales_df_q1["order_status"] == "Completed"] # Q1_2016_df_pivot = Q1_2016_df.pivot_table(index='service', columns=['order_status','Month' ], values='num_orders', aggfunc= 'sum') sales_df_q1_pivot = sales_df_q1.pivot_table(index='service', columns=['order_status'], values='total_cbv', aggfunc= 'sum')
sales_df_q1_pivot_orders = sales_df_q1.pivot_table(index='service', columns=['order_status'], values='num_orders', aggfunc= 'sum') sales_df_q1_pivot.reset_index(inplace = True)
sales_df_q1_pivot.columns = ["Service","Q1_revenue_completed"]
sales_df_q1_pivot sales_df_q1_pivot_orders.reset_index(inplace = True)
sales_df_q1_pivot_orders.columns = ["Service","Q1_order_completed"] optimization_Df = pd.merge( sales_df_q1_pivot, budget_df, how="left", on="Service", ) optimization_Df = pd.merge( optimization_Df, sales_df_q1_pivot_orders, how="left", on="Service", ) optimization_Df.columns = ["Service", "Q1_revenue_completed", "Cost_per_100_inc_booking", "max_q2_growth_rate","Q1_order_completed"]
optimization_Df.head(5)
#import csv
Análisis de negocios | Caso de negocio | Estudio de caso | Negocio
  • Para Box, los ingresos del primer trimestre son de 1 mil millones, el costo de 23 viajes incrementales es de 100 millones, su tasa de crecimiento máxima esperada es del 40 % y se completaron 7 mil viajes en total a 63 mil por pedido.

¿Es posible lograr la máxima tasa de crecimiento para todos los servicios con un presupuesto disponible de 40B?

## If all service max growth is to be achived what is the budget needed? and whats the deficiet?
optimization_Df["max_q2_growth_rate_upd"] = optimization_Df['max_q2_growth_rate'].str.extract('(d+)').astype(int) ## extract int from string
optimization_Df["max_growth_q2_cbv"] = (optimization_Df.Q1_order_completed *(1+ optimization_Df.max_q2_growth_rate_upd/100)) ## Q2 max orders based on Q1 orders
optimization_Df["abs_inc_orders"] = optimization_Df.max_growth_q2_cbv-optimization_Df.Q1_order_completed ## Total increase in orders optimization_Df["cost_of_max_inc_q2_order"] = optimization_Df.abs_inc_orders * optimization_Df.Cost_per_100_inc_booking /100 ## Total Cost to get maximum growth for each serivce display(optimization_Df) display(budget_df[budget_df["Service"] == "Budget:"].reset_index())
budget_max = budget_df[budget_df["Service"] == "Budget:"].reset_index()
budget_max = budget_max.iloc[:,2:3].values[0][0]
print("Budget difference by")
display(budget_max-optimization_Df.cost_of_max_inc_q2_order.sum() ) ## Therefore max of the everything cannot be achieved#import csv

La respuesta es No. 247B(247,244,617,204) se requiere más presupuesto para alcanzar las metas de crecimiento para todos los servicios.

¿Es posible lograr al menos el 10% de la tasa de crecimiento máxima para todos los servicios con un presupuesto disponible de 40B?

## Then what is the budget needed and what will the extra budget at hand??
optimization_Df["min_10_max_growth_q2_cbv"] = (optimization_Df.Q1_order_completed *(1+ optimization_Df.max_q2_growth_rate_upd/1000)) ## atleast 10% of max if achieved, this is orders optimization_Df["min_10_abs_inc_orders"] = optimization_Df.min_10_max_growth_q2_cbv-optimization_Df.Q1_order_completed ## what is the increase in orders needed to achieve 10% orders growth
optimization_Df["min_10_cost_of_max_inc_q2_order"] = optimization_Df.min_10_abs_inc_orders * optimization_Df.Cost_per_100_inc_booking /100 ## Cost associatedfor 10% increase in orders display(budget_max-optimization_Df.min_10_cost_of_max_inc_q2_order.sum() ) ## Total budget remaining display((budget_max-optimization_Df.min_10_cost_of_max_inc_q2_order.sum())/budget_max) ## Budget utilization percentage optimization_Df["perc_min_10_max_growth_q2_cbv"] =( ( optimization_Df.max_q2_growth_rate_upd/1000)) ## atleast 10% of max if achieved, 7 to percent divide by 100, 10% of this number. divide by 10, so 1000
optimization_Df["perc_max_growth_q2_cbv"] =( ( optimization_Df.max_q2_growth_rate_upd/100)) ## Max growth to be achieved optimization_Df["q1_aov"] = optimization_Df.Q1_revenue_completed/optimization_Df.Q1_order_completed ## Q1 average order value
optimization_Df["order_profitability"] = 0.1 ## this is assumption that 10% will be profit optimization_Df["a_orders_Q2"] = (optimization_Df.Q1_order_completed *(1+ optimization_Df.perc_min_10_max_growth_q2_cbv)) ## based on 10% growth, total new orders for qc optimization_Df["a_abs_inc_orders"] = optimization_Df.a_orders_Q2-optimization_Df.Q1_order_completed optimization_Df["a_Q2_costs"] = optimization_Df.Cost_per_100_inc_booking* optimization_Df.a_abs_inc_orders/100 ##There is scope for improvement here, so This can be adjusted based on revenue or ranking from Q1
display(budget_max - optimization_Df.a_Q2_costs.sum()) optimization_Df#import csv

La respuesta es sí. Con solo el 28% del presupuesto disponible de 40B, esto se puede lograr. La subutilización del presupuesto disponible nunca es una opción, y ningún líder empresarial usaría solo el 28 % del presupuesto disponible.

Por lo tanto, no se puede lograr el crecimiento máximo en todos los servicios, y lograr el 10 % de la tasa de crecimiento máxima conducirá a un presupuesto infrautilizado. Por lo tanto, la necesidad aquí es optimizar el gasto de tal manera que:

  • La quema total de efectivo no cruza 40B.
  • La tasa de crecimiento general en el segundo trimestre en todos los servicios es igual o inferior a la tasa de crecimiento máxima.
  • Se llaman restricciones en la optimización lineal.
  • El objetivo es maximizar las ganancias.

Suposiciones usadas aquí:

  • Cada servicio tiene una ganancia del 10%.
  • AOV (ingresos/pedidos) seguirá siendo el mismo que en el primer trimestre.

Canalización de datos previa a la optimización:

## Data prep for pulp optimization
perc_all_df = pd.DataFrame(data = list(range(1,optimization_Df.max_q2_growth_rate_upd.max()+1)), columns = ["growth_perc"]) ## create a list of all percentage growth, from 1 to max to growth expected, this is to create simulation for optimization
display(perc_all_df.head(1)) optimization_Df_2 = optimization_Df.merge(perc_all_df, how = "cross") ## cross join with opti DF ## Filter and keeping all percentgaes upto maximum for each service
## Minimum percentage kept is 1
optimization_Df_2["filter_flag"] = np.where(optimization_Df_2.max_q2_growth_rate_upd >= (optimization_Df_2.growth_perc),1,0)
optimization_Df_2["abs_profit"] = (optimization_Df_2.q1_aov)*(optimization_Df_2.order_profitability)
optimization_Df_3 = optimization_Df_2[optimization_Df_2["filter_flag"] == 1] display(optimization_Df_3.head(1))
display(optimization_Df_3.columns) ## Filter columns needed
optimization_Df_4 = optimization_Df_3[[ 'Service', ## services offered 'Cost_per_100_inc_booking', ## cost of additional 100 orders 'Q1_order_completed', ## to calculate q2 growth based on q1 orders 'perc_min_10_max_growth_q2_cbv', ## minimum growth percent need 'perc_max_growth_q2_cbv', ## max growth percent allowed 'abs_profit', ## profit per order 'growth_perc' ## to simulative growth percet across ]] display(optimization_Df_4.head(2)) optimization_Df_4["orders_Q2"] = (optimization_Df_4.Q1_order_completed *(1+ optimization_Df_4.growth_perc/100)) ## based on growth, total new orders for qc
optimization_Df_4["abs_inc_orders"] = optimization_Df_4.orders_Q2-optimization_Df_4.Q1_order_completed
optimization_Df_4["profit_Q2_cbv"] = optimization_Df_4.orders_Q2 * optimization_Df_4.abs_profit
optimization_Df_4["growth_perc"] = optimization_Df_4.growth_perc/100
optimization_Df_4["Q2_costs"] = optimization_Df_4.Cost_per_100_inc_booking* optimization_Df_4.abs_inc_orders/100 display(optimization_Df_4.head()) optimization_Df_5 = optimization_Df_4[[ 'Service', ## services offered 'Q2_costs', ## cost total for the growth expected 'perc_min_10_max_growth_q2_cbv', ## minimum growth percent need 'perc_max_growth_q2_cbv', ## max growth percent allowed 'profit_Q2_cbv', ## total profit at the assumed order_profitability rate 'growth_perc' ## to simulative growth percet across ]] optimization_Df_5 display(optimization_Df_5.head(10))
display(optimization_Df_5.shape)
"

Comprender el conjunto de datos de optimización

  • Servicio - Vaya producto.
  • 10% de crecimiento máximo, es el crecimiento mínimo que debe alcanzar cada servicio. Entonces, Box debería lograr al menos un crecimiento del 0.7%.
    • Ésta es una limitación.
  • El crecimiento máximo decidido por los líderes empresariales para Box es del 7%.
    • Ésta es una limitación.
  • Para Box, 1% a 7% es el rango de crecimiento. 1% es más de 0.7% y 7% es el máximo. El optimizador elegirá la mejor tasa de crecimiento en función de las restricciones.
    • Esta es una variable de decisión. El algoritmo elegirá uno entre 7.
  • Para un crecimiento del 1 % (incremental), la quema de efectivo es de 255 millones.
    • Ésta es una limitación.
  • Si el crecimiento incremental es del 1%, entonces la ganancia general (orgánica + inorgánica) es 2.4B.
    • Este es el objetivo.
## Best optimization for our case case. This is good. prob = LpProblem("growth_maximize", LpMaximize) ## Initialize optimization problem - Maximization problem optimization_Df_5.reset_index(inplace = True, drop = True) markdowns = list(optimization_Df_5['growth_perc'].unique()) ## List of all growth percentages
cost_v = list(optimization_Df_5['Q2_costs']) ## List of all incremental cost to achieve the growth % needed perc_min_10_max_growth_q2_cbv = list(optimization_Df_5['perc_min_10_max_growth_q2_cbv'])
growth_perc = list(optimization_Df_5['growth_perc']) ## lp variables
low = LpVariable.dicts("l_", perc_min_10_max_growth_q2_cbv, lowBound = 0, cat = "Continuous")
growth = LpVariable.dicts("g_", growth_perc, lowBound = 0, cat = "Continuous")
delta = LpVariable.dicts ("d", markdowns, 0, 1, LpBinary)
x = LpVariable.dicts ("x", range(0, len(optimization_Df_5)), 0, 1, LpBinary) ## objective function - Maximise profit, column name - profit_Q2_cbv
## Assign value for each of the rows -
## For all rows in the table each row will be assidned x_0, x_1, x_2 etc etc
## This is later used to filter the optimal growth percent prob += lpSum(x[i] * optimization_Df_5.loc[i, 'profit_Q2_cbv'] for i in range(0, len(optimization_Df_5))) ## one unique growth percentahe for each service
## Constraint one for i in optimization_Df_5['Service'].unique(): prob += lpSum([x[idx] for idx in optimization_Df_5[(optimization_Df_5['Service'] == i) ].index]) == 1 ## Do not cross total budget
## Constraint two
prob += (lpSum(x[i] * optimization_Df_5.loc[i, 'Q2_costs'] for i in range(0, len(optimization_Df_5))) - budget_max) <= 0 ## constraint to say minimum should be achived
for i in range(0, len(optimization_Df_5)): prob += lpSum(x[i] * optimization_Df_5.loc[i, 'growth_perc'] ) >= lpSum(x[i] * optimization_Df_5.loc[i, 'perc_min_10_max_growth_q2_cbv'] ) prob.writeLP('markdown_problem') ## Write Problem name
prob.solve() ## Solve Problem
display(LpStatus[prob.status]) ## Problem status - Optimal, if problem solved successfully
display(value(prob.objective)) ## Objective, in this case what is the maximized profit with availble budget - 98731060158.842 @ 10% profit per order #import csv
print(prob)
print(growth)

Comprender cómo escribir un problema de LP es clave para resolverlo

  • Inicializar el problema
    • prob = LpProblema(“maximizar_crecimiento”, LpMaximizar)
    • growth_maximize es el nombre del problema.
    • LpMaximize le permite al solucionador saber que es un problema de maximización.
  • Crear una variable de la función de decisión.
    • crecimiento = LpVariable.dicts(“g_”, growth_perc, lowBound = 0, cat = “Continuo”)
    • Para Pulp, se deben crear dictados pulp.
    • g_ es el prefijo de la variable.
    • growth_perc es el nombre de la lista
    • El límite bajo es el porcentaje de crecimiento mínimo, puede comenzar desde 0.
    • La variable es continua.
    • Hay 60 porcentajes de crecimiento únicos desde 1% (mínimo) hasta 60% (máximo). (La comida tiene una tasa de crecimiento máxima del 60%).
    • Variables - 0 <= x_0 <= 1 entero por fila 0 a 0 <= x_279 <= 1 entero para la fila 279.
  • Agregar función objetivo al problema
    • prob += lpSum(x[i] *optimization_Df_5.loc[i, 'profit_Q2_cbv'] for i in range(0, len(optimization_Df_5)))
    • Pulpa crea una ecuación -> 2423147615.954*x_0 + 2447139176.5080004*x_1 + 225916468.96*x_3+ …. + 8576395.965000002*x_279. Hay 280 filas en el conjunto de datos, por lo que para cada valor de beneficio, se crea una variable.
  • Añadir restricción:
    • Uno: un porcentaje de crecimiento para cada servicio
      • para i en optimización_Df_5['Servicio'].unique(): prob += lpSum([x[idx] para idx en optimización_Df_5[(optimización_Df_5['Servicio'] == i) ].index]) == 1
      • Para cada servicio, seleccione solo un porcentaje de crecimiento.
      • Para Casilla de 1 a 7 seleccione solo una.
      • La ecuación para la caja – _C1: x_0 + x_1 + x_2 + x_3 + x_4 + x_5 + x_6 = 1
      • La ecuación para GLAM – _C2: x_10 + x_11 + x_12 + x_13 + x_14 + x_15 + x_16 + x_7 + x_8 + x_9 = 1
      • Como hay 11 servicios, se crean 11 restricciones, una para cada servicio.
    • Dos – No cruzar el presupuesto total de 40B
      • prob += (lpSum(x[i] * optimization_Df_5.loc[i, ‘Q2_costs’] for i inrange(0, len(optimization_Df_5))) – budget_max) <= 0
      • La suma de todos los costos menos el presupuesto total debe ser menor o igual a cero.
      • Ecuación _C12: 255040000 x_0 + 510080000 x_1 + …. + 16604 x_279 <= 0
      • _C12: es la única restricción aquí porque hay un presupuesto total de 40B y no hay restricción sobre cuánto puede gastar cada servicio.
    • Tres: restricción para decir que se debe lograr el mínimo
      • for i in range(0, len(optimization_Df_5)): prob += lpSum(x[i] *optimization_Df_5.loc[i, 'growth_perc'] ) >= lpSum(x[i] *optimization_Df_5.loc[i, ' perc_min_10_max_growth_q2_cbv'] )
      • Para cada fila, se crea la ecuación de restricción de porcentaje de crecimiento mínimo. Hay 279 filas, por lo que se crean 279 restricciones.
      • _C13: 0.003 x_0 >= 0 de la fila 0 a _C292: 0.315 x_279 >= 0 a la fila 279.
    • "Optimal'” es la salida deseada.
      • display(LpStatus[prob.estado])
    • 98731060158.842 es el beneficio maximizado.
      • display(valor(prob.objetivo))
var_name = []
var_values = []
for variable in prob.variables(): if 'x' in variable.name: var_name.append(variable.name) var_values.append(variable.varValue) results = pd.DataFrame() results['variable_name'] = var_name
results['variable_values'] = var_values
results['variable_name_1'] = results['variable_name'].apply(lambda x: x.split('_')[0])
results['variable_name_2'] = results['variable_name'].apply(lambda x: x.split('_')[1])
results['variable_name_2'] = results['variable_name_2'].astype(int)
results.sort_values(by='variable_name_2', inplace=True)
results.drop(columns=['variable_name_1', 'variable_name_2'], inplace=True)
results.reset_index(inplace=True)
results.drop(columns='index', axis=1, inplace=True) # results.head() optimization_Df_5['variable_name'] = results['variable_name'].copy()
optimization_Df_5['variable_values'] = results['variable_values'].copy()
optimization_Df_5['variable_values'] = optimization_Df_5['variable_values'].astype(int)# optimization_Df_6.head() #import csv## with no budget contraint
optimization_Df_10 = optimization_Df_5[optimization_Df_5['variable_values'] == 1].reset_index() optimization_Df_10["flag"] = np.where(optimization_Df_10.growth_perc >= optimization_Df_10.perc_min_10_max_growth_q2_cbv,1,0) display(optimization_Df_10) display(budget_max - optimization_Df_10.Q2_costs.sum())
display( optimization_Df_10.Q2_costs.sum())
"
  • La tasa de crecimiento máxima para los servicios respectivos se muestra en el gráfico anterior. Para Box es 1%, para Clean es 1%, para Food es 17%, etc.
  • La quema total de efectivo es – 39999532404.0
  • Presupuesto subutilizado – 467596.0
  • Beneficio maximizado – 98731060158.0

La solución a la segunda parte

sales_df =pd.read_csv('https://raw.githubusercontent.com/chrisdmell/Project_DataScience/working_branch/09_gojek/model_analytics__data.csv') time_to_pandas_time = ["date"] for cols in time_to_pandas_time: sales_df[cols] = pd.to_datetime(sales_df[cols]) sales_df['Month'] = sales_df['date'].dt.month Q1_2016_df = sales_df[sales_df['Month'] !=900] Q1_2016_df['Month'] = np.where(Q1_2016_df['Month'] == 1,"Jan",np.where(Q1_2016_df['Month'] == 2,"Feb",np.where(Q1_2016_df['Month'] == 3,"Mar","Apr"))) Q1_2016_df['test_control'] = np.where(Q1_2016_df['date'] <= "2016-03-30","train", "test") display(Q1_2016_df.head(5)) display(Q1_2016_df.order_status.unique()) display(Q1_2016_df.service.unique()) display(Q1_2016_df.date.max())
#import csv
  • Importar conjunto de datos
  • Convertir fecha a fecha y hora de pandas
  • Derivar columnas de mes
  • Derivar columnas de tren y prueba
display(Q1_2016_df.head())
display(Q1_2016_df.date.max()) Q1_2016_df_2 = Q1_2016_df[Q1_2016_df["date"] <= "2016-04-01"]
display(Q1_2016_df_2.date.max()) Q1_2016_df_2 = Q1_2016_df_2[Q1_2016_df["order_status"] == "Cancelled"] Q1_2016_df_date_unique = Q1_2016_df_2[["date"]].drop_duplicates()
Q1_2016_df_date_service = Q1_2016_df_2[["service"]].drop_duplicates() Q1_2016_df_CJ = Q1_2016_df_date_unique.merge(Q1_2016_df_date_service, how = "cross") ## cross join with opti DF display(Q1_2016_df_date_unique.head())
display(Q1_2016_df_date_unique.shape)
display(Q1_2016_df_date_unique.max())
display(Q1_2016_df_date_unique.min()) display(Q1_2016_df_2.shape)
Q1_2016_df_3 = Q1_2016_df_CJ.merge(Q1_2016_df_2, on=['date','service'], how='left', suffixes=('_x', '_y')) display(Q1_2016_df_3.head())
display(Q1_2016_df_3.shape)
display(Q1_2016_df_CJ.shape) Q1_2016_df_3["total_cbv"].fillna(0, inplace = True)
print("Null check ",Q1_2016_df_3.isnull().values.any()) nan_rows = Q1_2016_df_3[Q1_2016_df_3['total_cbv'].isnull()]
nan_rows display(Q1_2016_df_3[Q1_2016_df_3.isnull().any(axis=1)]) Q1_2016_df_3["dayofweek"] = Q1_2016_df_3["date"].dt.dayofweek
Q1_2016_df_3["dayofmonth"] = Q1_2016_df_3["date"].dt.day Q1_2016_df_3["Is_Weekend"] = Q1_2016_df_3["date"].dt.day_name().isin(['Saturday', 'Sunday']) Q1_2016_df_3.head()
  • Filtra solo por pedidos cancelados.
  • Para todos los servicios, únase de forma cruzada con fechas del 01 de enero al 01 de abril, de modo que las predicciones para todos los días estén disponibles.
  • Reemplace NULL con 0.
  • Derivar día del mes
  • Derivar el día de la semana.
  • Crear columna binaria de fin de semana/día de la semana
"
Q1_2016_df_4 = Q1_2016_df_3[Q1_2016_df_3["service"] != "GO-TIX"] Q1_2016_df_5 = pd.get_dummies(Q1_2016_df_4, columns=["Month","dayofweek"]) display(Q1_2016_df_5.head()) import numpy as np
import pandas as pd
# from sklearn.datasets import load_boston
from sklearn.preprocessing import Normalizer
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from numpy import mean
from numpy import std
from sklearn.metrics import make_scorer
from sklearn.model_selection import cross_val_predict Q1_2016_df_5.columns all_columns = ['date', 'service', 'num_orders', 'order_status', 'total_cbv', 'test_control', 'dayofmonth', 'Is_Weekend', 'Month_Apr', 'Month_Feb', 'Month_Jan', 'Month_Mar', 'dayofweek_0', 'dayofweek_1', 'dayofweek_2', 'dayofweek_3', 'dayofweek_4', 'dayofweek_5', 'dayofweek_6'] model_variables = [ 'dayofmonth', 'Is_Weekend', 'Month_Apr', 'Month_Feb', 'Month_Jan', 'Month_Mar', 'dayofweek_0', 'dayofweek_1', 'dayofweek_2', 'dayofweek_3', 'dayofweek_4', 'dayofweek_5', 'dayofweek_6'] target_Variable = ["total_cbv"] all_columns = ['service', 'test_control', 'dayofmonth', 'Is_Weekend', 'Month_Apr', 'Month_Feb', 'Month_Jan', 'Month_Mar', 'dayofweek_0', 'dayofweek_1', 'dayofweek_2', 'dayofweek_3', 'dayofweek_4', 'dayofweek_5', 'dayofweek_6']
  • Filtrar GO-TIX
  • Una codificación activa: mes y día de la semana
  • Importar todas las bibliotecas necesarias
  • Cree una lista de columnas, tren, predictor, etc.

model_1 = Q1_2016_df_5[Q1_2016_df_5["service"] =="GO-FOOD"] test = model_1[model_1["test_control"]!="train"]
train = model_1[model_1["test_control"]=="train"] X = train[model_variables]
y = train[target_Variable] train_predict = model_1[model_1["test_control"]=="train"]
x_ = X[model_variables] sc = StandardScaler()
X_train = sc.fit_transform(X)
X_test = sc.transform(x_)
  • Filtrar datos para un servicio: GO-FOOD
  • Crear marcos de datos de entrenamiento y prueba
  • Cree X: con columnas de tren e y con columna predictora.
  • Utilice Standardscalar para la transformación de puntuación z.
#define custom function which returns single output as metric score
def NMAPE(y_true, y_pred): return 1 - np.mean(np.abs((y_true - y_pred) / y_true)) * 100 #make scorer from custome function
nmape_scorer = make_scorer(NMAPE) # prepare the cross-validation procedure
cv = KFold(n_splits=3, random_state=1, shuffle=True)
# create model
model = LinearRegression()
# evaluate model
scores = cross_val_score(model, X, y, scoring=nmape_scorer, cv=cv, n_jobs=-1)
# report performance
print('Accuracy: %.3f (%.3f)' % (mean(scores), std(scores))) y_pred = cross_val_predict(model, X, y, cv=cv)
  • cross_val_score no tiene MAPE como marcador incorporado, así que defina MAPE.
  • Crear instancia de CV
  • Crear instancia de LR
  • Use cross_val_score para obtener los puntajes MAPE promedio en CV Folds para GO-Foods.
  • Para cada servicio, este código se puede recortar, cree una función para crear

def go_model(Q1_2016_df_5, go_service,model_variables,target_Variable): """ Q1_2016_df_5 go_service model_variables target_Variable """ model_1 = Q1_2016_df_5[Q1_2016_df_5["service"] ==go_service] test = model_1[model_1["test_control"]!="train"] train = model_1[model_1["test_control"]=="train"] X = train[model_variables] y = train[target_Variable] train_predict = model_1[model_1["test_control"]=="train"] x_ = X[model_variables] X_train = sc.fit_transform(X) X_test = sc.transform(x_) # prepare the cross-validation procedure cv = KFold(n_splits=3, random_state=1, shuffle=True) # create model model = LinearRegression() # evaluate model scores = cross_val_score(model, X, y, scoring=nmape_scorer, cv=cv, n_jobs=-1) # report performance print('Accuracy: %.3f (%.3f)' % (mean(scores), std(scores))) y_pred = cross_val_predict(model, X, y, cv=cv) return y_pred,mean(scores), std(scores) a,b,c = go_model(Q1_2016_df_5, "GO-FOOD",model_variables,target_Variable) b
  • Pasos de modelado convertidos a una función:
    • Q1_2016_df_5 – Datos base
    • go_service – go-tix, go-send, etc.
    • model_variables: variables utilizadas para entrenar el modelo
    • target_Variable: variable predictora (total_cbv).
  • Para cada servicio, se puede ejecutar el método para obtener el MAPE de pronóstico promedio en los 11 servicios.

La solución a la tercera parte

La pregunta 3 es una pregunta abierta y se anima a los lectores a resolverla por su cuenta. Algunas de las hipótesis son:

  • Como esto es específico para un área y una geografía de partículas, es seguro asumir que la aplicación permaneció más o menos igual, y que las intervenciones del producto podrían haber desempeñado solo un papel menor. Y si hubo una intervención del producto, fue solo específica para esta área en particular.
  • Se incorporaron restaurantes y cadenas de comida de buena calidad/famosos, y los usuarios ahora tienen una gran variedad de buenas opciones para pedir o pedir en restaurantes familiares.
  • La velocidad de entrega mejoró significativamente al incorporar una mayor cantidad de agentes de entrega.
  • Capacitación efectiva de los agentes de entrega para reducir las cancelaciones.
  • Trabajé con socios de restaurantes para manejar el caos de las horas pico de una mejor manera.

Recursos y referencias útiles

  • Acoplar En el 'Equipo central de análisis y ciencia'
  • Cómo Estimamos el tiempo de desembarque de alimentos con 'Tensoba'
  • Empresa Asignaciones de estudios de casos para analistas de datos de nivel de entrada
  • Resolver Asignaciones de estudios de casos de negocios para científicos de datos
  • Usar Datos para apreciar a nuestros clientes
  • under La herramienta de pronóstico automatizado de Hood of Gojek
  • Experimentación en Gojek
  • GO-JEK Impacto para Indonesia
  • VE RAPIDO: Los datos detrás del Ramadán
  • Pulpa mejoramiento.
  • Lineal programación usando pulp.
  • Marketing optimización de campañas.
  • sencillos formas de optimizar algo usando python.

Conclusión

Los estudios de casos, cuando se realizan correctamente, siguiendo los pasos indicados anteriormente, tendrán un impacto positivo en el negocio. Los reclutadores no buscan respuestas, sino un enfoque de esas respuestas, la estructura seguida, el razonamiento utilizado y el conocimiento práctico y de negocios utilizando análisis de negocios. Este artículo proporciona un marco fácil de seguir para los analistas de datos utilizando un estudio de caso empresarial real como ejemplo.

Puntos clave:

  • Hay dos enfoques para responder a este estudio de caso, de abajo hacia arriba y de arriba hacia abajo. Aquí, se ha considerado un enfoque de abajo hacia arriba, debido a la falta de familiaridad con los datos y la falta de disponibilidad del contexto empresarial.
  • Cortar y dividir en cubitos las cifras de ventas en todas las dimensiones, identificando tendencias y patrones en todos los servicios, es el mejor enfoque para descubrir los desafíos para el crecimiento.
  • Sea nítido y vaya al grano, mientras proporciona recomendaciones.
  • Deje que los datos cuenten una historia, en lugar de solo probar puntos de datos, por ejemplo: los tres servicios principales contribuyen a más del 90% de los ingresos. Si bien a nivel de grupo, el crecimiento está en el lado positivo, en varios servicios, existen desafíos con la finalización del viaje, la cancelación del conductor, etc. Para Alimentos: la reducción de las cancelaciones en un Y% generará mayores ingresos en el segundo trimestre en un X%, etc.
  • La optimización usando pulp es intimidante cuando hay más de 3 restricciones. Escribir un problema de LP en una hoja de papel y luego codificarlo seguramente facilitará la tarea.

¡Buena suerte! Aquí está mi LinkedIn perfil si quieres conectar conmigo o quieres ayudar a mejorar el artículo. Siéntete libre de enviarme un ping mejor compañero/Mentro; puedes dejarme un mensaje con tu consulta. Estaré feliz de estar conectado. Consulte mis otros artículos sobre ciencia de datos y análisis esta página.

Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.

punto_img

café vc

café vc

Información más reciente

punto_img