제품 채택 곡선 추정은 에이전트 기반 모델링의 이점을 얻을 수 있는 마케팅 영역입니다. 저는 현재 에이전트 기반 모델링 프레임워크를 작업 중이므로 이 블로그 에 간단한 입소문 에이전트 기반 제품 판매 모델을 추가하고 싶었습니다 . 모델은 추가 수정(사용자 지정)을 위한 간단한 기준선으로 사용할 수 있습니다. 이 모델을 Python으로 구현하고 있습니다. 내가 적용한 프레임워크는 다음에서 찾을 수 있습니다.
- 링크 : abm_framework
위의 프레임워크를 적용하는 다른 두 가지 예를 이미 공유했습니다. 첫 번째 예에서는 에이전트 기반 SIR 모델을 개발했습니다. 이러한 모델은 예를 들어 질병 확산을 모델링하는 데 사용할 수 있습니다.
또 다른 예에서 저는 Python에서 사회적 분리 모델을 구현했습니다.
이제 입소문 모델에 대해 간략하게 논의하고 Python으로 구현하는 방법을 보여드리겠습니다.
간단한 개념 입소문 모델
이 예는 단일 에이전트 모집단이 있는 그리드 기반 시뮬레이션 환경을 적용합니다. 각 에이전트는 이진 변수를 특징으로 합니다. 변수는 에이전트가 이미 새 제품을 구매했는지(제품 채택) 여부를 나타냅니다.
다음 논리가 적용됩니다.
- 각 반복에 대해 모든 에이전트가 한 번(임의의 순서로) 호출됩니다.
- 에이전트가 호출되면 에이전트는 이웃을 평가합니다.
- 에이전트가 이미 새 제품을 구매한 경우 이웃은 에이전트의 영향을 받고 지정된 확률로 새 제품을 구매하도록 확신합니다. 또는 그 반대의 경우 에이전트는 이미 제품을 구매한 모든 이웃에 의해 확신됩니다(동일한 확률로)
- 에이전트는 제품을 한 번만 구매할 수 있습니다. 일단 제품을 구매하면 상태가 변경되지 않습니다.
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 모델에 대한 결론
이 기사에서는 Python에서 abm_framework 의 또 다른 응용 프로그램을 제시했습니다 . 프레임워크는 더 작은 그리드 기반 에이전트 기반 모델링을 지원합니다. 모델을 사용하여 간단한 기본 입소문 에이전트 기반 모델을 구현할 수 있었습니다. 이 모델은 제품 채택이 S자 곡선을 따르는 방법과 이 경우 시장이 일정 시간 후 완전히 침투하는 방법을 보여줍니다. 이 간단한 기준 모델을 사용하여 수정된 버전을 생성할 수 있습니다. 예를 들어 여러 경쟁 제품으로 모델을 구현할 수 있습니다. 또는 다양한 고객 그룹과 다양한 사용자 경험으로 모델을 구현할 수 있습니다.
최적화 및 시뮬레이션을 전문으로하는 산업 엔지니어 (R, Python, SQL, VBA)
Leave a Reply