Skip to content
Marketing Retention analysis
Spinner
DataFrameavailable as
marketing
variable
SELECT * FROM 'marketing_new.csv';
import seaborn as sns
import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt
marketing.head()

Create functions

def received_personalisation(dataframe, columns):
    
    all_cust = dataframe.groupby(columns)['user_id'].nunique()
    
    # Personalised
    personalised = dataframe[dataframe['variant'] == 'personalization']['user_id'].nunique()
    
    personalised_rate = personalised / all_cust
    
    personalised_rate.fillna(0)
    
    return personalised_rate
def is_wrong_lang_rate(dataframe, columns):
    
    
    all_cust = dataframe.groupby(columns)['user_id'].nunique()
    
    # Wrong language
    wrong_lang = dataframe[dataframe['is_correct_lang'] == 'No'].groupby(columns)['user_id'].nunique()
    
    
    # Perform calc
    return wrong_lang / all_cust
    
    
is_wrong_lang_rate(marketing, 'language_preferred').reset_index()
# Here I'm creating a function to automate my workflow
def conversion_rate(dataframe, columns):
    
    # converted customers 
    subscribers = dataframe[dataframe['converted'] == True].groupby(columns)\
                                        ['user_id'].nunique()
    
    # all customers 
    all_cust = dataframe.groupby(columns)['user_id'].nunique()
    
    # return converted / by all 
    conversion_rate = subscribers / all_cust
    
    conversion_rate = conversion_rate.fillna(0)


    
    return round(conversion_rate, 2)

# Fixing the sort_values call
conversion_rate(marketing, 'language_displayed').sort_values(ascending=False).reset_index()
# Here I'm creating a function to automate my workflow

def retention_rate(dataframe, columns):
    
    # converted customers 
    converted = dataframe[dataframe['converted'] == True].groupby(columns)['user_id'].nunique()
    
    # retained customers
    retained = dataframe[dataframe['is_retained'] == True].groupby(columns)['user_id'].nunique()
    
    # return converted / by all 
    retention_rate = retained / converted

    return round(retention_rate, 2)
# Isolate english speakers
english_speakers = marketing[marketing['language_displayed'] == 'English']

# Calculate the total number of English speaking users
total = english_speakers['user_id'].nunique()

# Calculate the number of English speakers who converted
subscribers = english_speakers[english_speakers['converted'] == True]['user_id'].nunique()

# Calculate conversion rate
conversion_rate_eng = subscribers/total
print('English speaker conversion rate:', round(conversion_rate_eng*100,2), '%')
conversion_rate(english_speakers, 'subscribing_channel')
facebook_customers = marketing[marketing['subscribing_channel'] == 'Facebook']
facebook_customers

Conversion Rates

# This code creates the data for English speakers historical view
conversion_rate(english_speakers, ['date_served']).reset_index()

On the 16th and 17th of January, 2018 the conversion rate for English spiked. Let's find out why