口碑代理为主的销售模式

产品采用曲线估计是一个可以从基于代理的建模中受益的营销领域。由于我目前正在研究基于代理的建模框架,因此我想在此博客中添加一个基于代理的简单口碑产品销售模型。该模型可用作进一步修改(定制)的简单基线。我正在用 Python 实现这个模型。我应用的框架可以在这里找到:

我已经分享了另外两个应用上述框架的例子。在第一个示例中,我开发了一个基于代理的 SIR模型。这样的模型可以例如用于模拟疾病传播。

在另一个例子中,我用 Python 实现了一个社会隔离模型。

我现在将简要讨论口碑模型并展示它在 Python 中的实现。

简单的概念口碑模型

此示例应用了基于网格的模拟环境,具有单个代理群体。每个代理都由一个二进制变量来表征。该变量表示代理是否已经购买了新产品(产品采用)。

应用以下逻辑:

  1. 对于每次迭代,所有代理都被调用一次(以随机顺序)
  2. 当代理被调用时,代理会评估其邻域
  3. 如果代理已经购买了新产品,则邻居会受到代理的影响,并被说服以指定的概率购买新产品。反之亦然,代理人被任何已经购买该产品的邻居说服(概率相同)
  4. 代理商只能购买一次产品。一旦他们购买了产品,他们的状态将保持不变

Python中基于代理的口碑模型

下面的代码应用了abm_framework并实现了上述口碑模型。

__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 of customers
    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")

我将在下一节讨论模拟结果。

口碑模拟结果

下面的线图由abm_framework生成,显示已购买产品的客户的总份额。有了给定的模型设置,市场就被完全渗透了。产品采用遵循某种 s 形的采用曲线。这是我对模型设置的期望。

下面的动画进一步显示了整个网格中的产品采用情况。该模拟从单个代理开始。这就是产品采用从那里传播的原因。网格是无止境的,这意味着当您从右侧退出网格时,您将在左侧进入网格。退出顶部的网格时,您进入底部的网格。网格没有边界。

当您调整模型设置和条件时,结果会有所不同。结果也将受到模型中任何其他机制的影响。使用这个简单的基于口碑代理的基线模型,您可以创建自己的修改后的产品采用模型。

口碑反导模型总结

在本文中,我介绍了abm_framework在 Python 中的另一个应用程序。该框架支持较小的基于网格的基于代理的建模。使用该模型,我能够实现一个简单的基于口碑代理的基线模型。该模型显示了产品采用如何遵循 s 形曲线,以及在这种情况下,市场如何在一段时间后完全渗透。您可以使用这个简单的基线模型来创建您自己的修改版本。例如,您可以实现具有多个竞争产品的模型。或者,您可以实施具有各种客户群和一系列不同用户体验的模型。

You May Also Like

Leave a Reply

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据