Die Schätzung der Produktakzeptanzkurve ist ein Marketingbereich, der von der agentenbasierten Modellierung profitieren kann. Da ich derzeit an einem agentenbasierten Modellierungs-Framework arbeite, wollte ich diesem Blog ein einfaches Produktverkaufsmodell auf Basis von Mundpropaganda hinzufügen . Das Modell kann als einfache Basis für weitere Modifikationen (Customizing) verwendet werden. Ich implementiere dieses Modell in Python. Das von mir angewandte Framework finden Sie hier:
- Link : abm_framework
Ich habe bereits zwei weitere Beispiele geteilt, die das obige Framework anwenden. Im ersten Beispiel habe ich ein agentenbasiertes SIR- Modell entwickelt. Solche Modelle können zB verwendet werden, um die Ausbreitung von Krankheiten zu modellieren.
In einem anderen Beispiel habe ich ein soziales Segregationsmodell in Python implementiert.
Ich werde nun kurz auf das Mundpropaganda-Modell eingehen und seine Implementierung in Python zeigen.
Einfaches konzeptionelles Mundpropaganda-Modell
Dieses Beispiel wendet eine Grid-basierte Simulationsumgebung mit einer einzigen Agentenpopulation an. Jeder Agent ist durch eine binäre Variable gekennzeichnet. Die Variable stellt dar, ob der Agent das neue Produkt bereits gekauft hat (Produktakzeptanz) oder nicht.
Dabei wird folgende Logik angewendet:
- Für jede Iteration werden alle Agenten einmal aufgerufen (in zufälliger Reihenfolge)
- Wenn ein Agent angerufen wird, bewertet der Agent seine Nachbarschaft
- Wenn der Agent das neue Produkt bereits gekauft hat, werden Nachbarn durch den Agenten beeinflusst und überzeugt, das neue Produkt mit einer bestimmten Wahrscheinlichkeit zu kaufen. Oder umgekehrt, der Agent wird von jedem Nachbarn überzeugt, der das Produkt bereits gekauft hat (mit gleicher Wahrscheinlichkeit)
- Agenten können das Produkt nur einmal kaufen. Sobald sie das Produkt gekauft haben, bleibt ihr Status unverändert
Agentenbasiertes Mundpropaganda-Modell in Python
Der folgende Code wendet das abm_framework an und implementiert das obige Mundpropaganda-Modell.
__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 of healthy humans
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")
Ich diskutiere die Simulationsergebnisse im folgenden Abschnitt.
Ergebnisse von Mundpropaganda-Simulationen
Der untere Linienplot wurde vom abm_framework generiert und zeigt den Gesamtanteil der Kunden, die das Produkt bereits gekauft haben. Mit den gegebenen Modelleinstellungen ist der Markt voll durchdrungen. Die Produktakzeptanz folgt einer etwas S-förmigen Adoptionskurve. Das hätte ich von den Modelleinstellungen erwartet.
Die folgende Animation zeigt außerdem die Produktakzeptanz im gesamten Grid. Diese Simulation begann mit einem einzigen Agenten. Aus diesem Grund breitet sich die Produktakzeptanz von dort aus aus. Das Gitter ist endlos, dh wenn Sie das Gitter zB auf der rechten Seite verlassen, betreten Sie das Gitter auf der linken Seite. Wenn Sie das Raster oben verlassen, betreten Sie das Raster unten. Das Gitter hat keine Grenze.
Die Ergebnisse unterscheiden sich, wenn Sie die Modelleinstellungen und -bedingungen anpassen. Die Ergebnisse werden auch durch zusätzliche Mechanismen im Modell beeinflusst. Mit diesem einfachen, auf Mundpropaganda basierenden Basismodell können Sie Ihr eigenes modifiziertes Produktannahmemodell erstellen.
Abschließende Bemerkungen zum ABM-Modell
In diesem Artikel habe ich eine weitere Anwendung des abm_framework in Python vorgestellt. Das Framework unterstützt kleinere gitterbasierte agentenbasierte Modellierung. Mit dem Modell war ich in der Lage, ein einfaches, auf Mundpropaganda basierendes Basismodell zu implementieren. Das Modell zeigt, wie die Produktakzeptanz einer S-förmigen Kurve folgt und wie der Markt in diesem Fall nach einiger Zeit vollständig durchdrungen ist. Sie können dieses einfache Basismodell verwenden, um Ihre eigene modifizierte Version zu erstellen. Sie könnten beispielsweise ein Modell mit mehreren konkurrierenden Produkten implementieren. Oder Sie implementieren ein Modell mit verschiedenen Kundengruppen und unterschiedlichen Benutzererfahrungen.
Wirtschaftsingenieur mit Interesse an Optimierung, Simulation und mathematischer Modellierung in R, SQL, VBA und Python
Leave a Reply