La estimación de la curva de adopción de productos es un dominio de marketing que puede beneficiarse del modelado basado en agentes. Como actualmente estoy trabajando en un marco de modelado basado en agentes, quería agregar a este blog un modelo simple de ventas de productos basado en agentes de boca en boca . El modelo se puede usar como una línea de base simple para modificaciones adicionales (personalización). Estoy implementando este modelo en Python. El marco aplicado por mí se puede encontrar aquí:
- Enlace : abm_framework
Ya he compartido otros dos ejemplos aplicando el marco anterior. En el primer ejemplo, desarrollé un modelo SIR basado en agentes . Dichos modelos se pueden utilizar, por ejemplo, para modelar la propagación de enfermedades.
En otro ejemplo, implementé un modelo de segregación social en Python.
Ahora discutiré brevemente el modelo de boca en boca y mostraré su implementación en Python.
Modelo de boca en boca conceptual simple
Este ejemplo aplica un entorno de simulación basado en cuadrículas con una sola población de agentes. Cada agente se caracteriza por una variable binaria. La variable representa si el agente ya compró el nuevo producto (adopción del producto) o no.
Se aplica la siguiente lógica:
- Para cada iteración, todos los agentes se llaman una vez (en secuencia aleatoria)
- Cuando se llama a un agente, el agente evalúa su vecindario
- Si el agente ya ha comprado el nuevo producto, el agente influye en los vecinos y los convence de comprar el nuevo producto con una probabilidad especificada. O viceversa, el agente es convencido por cualquier vecino que ya haya comprado el producto (con la misma probabilidad)
- Los agentes solo pueden comprar el producto una vez. Una vez que han comprado el producto, su estado permanece sin cambios.
Modelo de boca en boca basado en agentes en Python
El siguiente código aplica abm_framework e implementa el modelo de boca en boca anterior.
__author__ = "Linnart Felkl"
__email__ = "LinnartSF@gmail.com"
if __name__ == "__main__":
print("demo starts")
import sys
from pathlib import Path
file = Path(__file__).resolve()
parent, root = file.parent, file.parents[1]
sys.path.append(str(root))
# remove the current file's directory from sys.path, unless already removed
try:
sys.path.remove(str(parent))
except ValueError:
pass
import data
import stats
import config
import framework
import random
import animation
# setup database manager and connection
db = data.Database("sqlite3", config.path_databasefile)
db_manager = data.Manager(db)
# create an empty environment
env = framework.Environment(1, True, 20, 20, db_manager)
# create initial population
attrs = ["purchased"]
datatypes = ["INTEGER"]
pops = framework.Populations(amount = 1, env = env, db_manager = db_manager, attributes = attrs, datatypes = datatypes)
pops.add_population(name = "customers",
size = 100,
attributes = attrs,
datatypes = datatypes,
initialvals = [0]
)
# model specific global settings (parameter values)
_prob_recommend = 0.03
_impactarea = 2
_initialclients = 1
# setup simulation
sim = framework.Simulation(200)
# make sure that environment and agents tables in database are ready
pops.write_env_to_db(sim.Iteration)
pops.write_agents_to_db(sim.Iteration)
agents = pops.get_agents()
# set initial purchases
for _ in range(_initialclients):
agent = random.choice(agents)
agent.set_attr_value("purchased", 1)
# execute simulation run; with centralized simulation control
while sim.run():
# select one random agent after the other
random.shuffle(agents)
for agent in agents:
# get that agents neighbourhood
neighbours = env.get_neighbourhood(agent, mode = "moore", radius = _impactarea)
for neighbour in neighbours:
if agent.get_attr_value("purchased") == 1 and neighbour.get_attr_value("purchased") == 0 and random.uniform(0,1) < _prob_recommend: neighbour.set_attr_value("purchased", 1)
if agent.get_attr_value("purchased") == 0 and neighbour.get_attr_value("purchased") == 1 and random.uniform(0,1) < _prob_recommend:
agent.set_attr_value("purchased", 1)
break
# update results in database, for agents and for environment
pops.write_agents_to_db(sim.Iteration)
pops.write_density_to_db(sim.Iteration)
# get dataframes with simulation results
agents_df = db_manager.get_agentsdf()
density_df = db_manager.get_densitydf()
# visualize simulation data
stats.set_fontsizes(8,10,12)
stats.plot_avgattr_lines(["purchased"], agents_df)
stats.save_plot("avgpurchasingshare")
animation.animate_density(
df = density_df,
filename = "purchasinganimation",
attr = "purchased",
defaultsize = 50,
color = "blue",
tpf = 0.05
)
# end program
db.close()
print("demo ends")
Discuto los resultados de la simulación en la siguiente sección.
Resultados de la simulación de boca en boca
El diagrama de línea inferior fue generado por abm_framework y muestra la proporción total de clientes que ya compraron el producto. Con la configuración del modelo dado, el mercado está completamente penetrado. La adopción del producto sigue una curva de adopción en forma de S. Esto es lo que hubiera esperado de la configuración del modelo.

La siguiente animación muestra además la adopción del producto en toda la cuadrícula. Esta simulación comenzó con un solo agente. Esta es la razón por la que la adopción del producto se extiende desde allí. La cuadrícula es interminable, lo que significa que al salir de la cuadrícula, por ejemplo, por el lado derecho, ingresa a la cuadrícula por el lado izquierdo. Al salir de la cuadrícula en la parte superior, ingresa a la cuadrícula en la parte inferior. La cuadrícula no tiene límite.

Los resultados diferirán cuando ajuste la configuración y las condiciones del modelo. Los resultados también se verán afectados por cualquier mecanismo adicional en el modelo. Con este sencillo modelo básico basado en el boca a boca de los agentes, puede crear su propio modelo de adopción de productos modificado.
Observaciones finales sobre el modelo ABM de boca en boca
En este artículo presenté otra aplicación de abm_framework en Python. El marco admite el modelado basado en agentes basado en cuadrículas más pequeñas. Usando el modelo, pude implementar un modelo básico simple basado en el boca a boca basado en agentes. El modelo muestra cómo la adopción del producto sigue una curva en forma de S y cómo el mercado, en este caso, se penetra por completo después de un tiempo. Puede usar este modelo de línea de base simple para crear su propia versión modificada. Por ejemplo, podría implementar un modelo con varios productos de la competencia. O podría implementar un modelo con varios grupos de clientes y una variedad de experiencias de usuario diferentes.

Ingeniero industrial especializado en optimización y simulación (R, Python, SQL, VBA)
Leave a Reply