This analysis appears in:
Towards a Model for Resource Allocation in API Value Networks James Houghton1, Michael Siegel1, Maja Vukovic
To perform this analysis, you will need to install pysd in a directory python can access. This analysis was performed with version 0.0.3
To view the vensim model, you can use the Vensim PLE
import pandas as pd
import pysd
Couldn't import dot_parser, loading of dot files will not be possible.
First we load the model from its Vensim .mdl file and see the free parameters.
API_model = pysd.read_vensim('Platform_adoption_with_APIs.mdl')
API_model.get_free_parameters()
{'api_discard_rate': '0.01', 'api_kickoff_time': '36', 'api_marketing_effectiveness': '0.1', 'api_word_of_mouth_effectiveness': '0.1', 'business_value_returned_per_user': '0.5', 'marketing_effectiveness_per_app': '0.001', 'platform_discard_rate': '0.02', 'platform_marketing_effectiveness': '0.005', 'platform_word_of_mouth_effectiveness': '0.05'}
We'll run the model once to demonstrate its operation
stocks = API_model.run(params={'api_marketing_effectiveness':.005,
'marketing_effectiveness_per_app':.0005,
'platform_marketing_effectiveness':.005})
stocks.plot()
plt.legend(loc='center left', bbox_to_anchor = (1,.5));
What we want to do is map out adoption at the simulation end (not the same as total revenue...) when the parameters of the model are varied.
We'll assume a fixed marketing budget, and distribute it between marketing to end users and marketing to developers. For simplicity, we'll assume that it takes the same amount of marketing resource to convert one percent of the total potential adopter pool in either case. We'll then vary the marketing effectiveness of the third party developers as the y axis of the plot.
total_marketing_budget = .01
params = {'api_kickoff_time':36,
'api_word_of_mouth_effectiveness':.01,
'platform_word_of_mouth_effectiveness':.01}
result = pd.DataFrame(data=-1, index=np.arange(0,.2,.005), columns=np.arange(0,1,.025))
for row in result.index:
for col in result.columns:
params.update({'api_marketing_effectiveness':total_marketing_budget*col,
'marketing_effectiveness_per_app':total_marketing_budget*row,
'platform_marketing_effectiveness':total_marketing_budget*(1-col)})
result.ix[row, col] = API_model.run(params)['active_end_users'].iloc[-1]
CP = plt.contour(result, levels=range(0,100,5), origin='lower')
plt.clabel(CP, inline=True, fmt='%i')
plt.yticks(range(len(result.index))[::5], result.index[::5]);
plt.xticks(range(len(result.columns))[::5], result.columns[::5]);
plt.ylabel('Mean App Marketing Budget \n[Fraction of Platform Total Marketing Budget]');
plt.xlabel('Fraction of Platform Total Marketing Budget Dedicated to Marketing API');
plt.title('Percent End User Adoption at Simulation Stop')
<matplotlib.text.Text at 0x1101794d0>