def __init__(self, model, start, end, init_customers, growth, churn, mrr,seed): ''' Creates the behavior/utility model objects, sets internal variables to prepare for simulation, and creates the database connection :param model: name of the behavior/utility model parameters :param start: start date for simulation :param end: end date for simulation :param init_customers: how many customers to create at start date :param growth: monthly customer growth rate :param churn: monthly customer churn rate :param mrr: customer MRR ''' self.model_name=model self.start_date = start self.end_date = end self.init_customers=init_customers self.monthly_growth_rate = growth self.monthly_churn_rate = churn self.mrr=mrr self.behave_mod=GaussianBehaviorModel(self.model_name,seed) self.util_mod=UtilityModel(self.model_name,self.monthly_churn_rate,self.behave_mod) self.subscription_count = 0 self.tmp_sub_file_name = os.path.join(tempfile.gettempdir(),'{}_tmp_sub.csv'.format(self.model_name)) self.tmp_event_file_name=os.path.join(tempfile.gettempdir(),'{}_tmp_event.csv'.format(self.model_name)) self.db = Postgres("postgres://%s:%s@localhost/%s" % ( os.environ['CHURN_DB_USER'], os.environ['CHURN_DB_PASS'], os.environ['CHURN_DB'])) self.con = post.connect( database= os.environ['CHURN_DB'], user= os.environ['CHURN_DB_USER'], password=os.environ['CHURN_DB_PASS'])
def __init__(self, model, start, end, init_customers, seed): """ Creates the behavior/utility model objects, sets internal variables to prepare for simulation, and creates the database connection :param model: name of the behavior/utility model parameters :param start: start date for simulation :param end: end date for simulation :param init_customers: how many customers to create at start date """ self.model_name = model self.start_date = start self.end_date = end self.init_customers = init_customers self.monthly_growth_rate = 0.12 self.util_mod = UtilityModel(self.model_name) behavior_versions = glob.glob("../conf/" + self.model_name + "_*.csv") self.behavior_models = {} self.model_list = [] for b in behavior_versions: version = b[(b.find(self.model_name) + len(self.model_name) + 1):-4] if version in ("utility", "population", "country"): continue behave_mod = FatTailledBehaviorModel(self.model_name, seed, version) self.behavior_models[behave_mod.version] = behave_mod self.model_list.append(behave_mod) if len(self.behavior_models) > 1: self.population_percents = pd.read_csv( "../conf/" + self.model_name + "_population.csv", index_col=0) self.util_mod.setChurnScale(self.behavior_models, self.population_percents) self.population_picker = np.cumsum(self.population_percents) self.country_lookup = pd.read_csv("../conf/" + self.model_name + "_country.csv") self.subscription_count = 0 self.tmp_sub_file_name = os.path.join( tempfile.gettempdir(), "{}_tmp_sub.csv".format(self.model_name)) self.tmp_event_file_name = os.path.join( tempfile.gettempdir(), "{}_tmp_event.csv".format(self.model_name)) self.db = Postgres("postgres://%s:%s@localhost/%s" % ( os.environ["CHURN_DB_USER"], os.environ["CHURN_DB_PASS"], os.environ["CHURN_DB"], )) self.con = post.connect( database=os.environ["CHURN_DB"], user=os.environ["CHURN_DB_USER"], password=os.environ["CHURN_DB_PASS"], )