<jupyter_start><jupyter_text>A / B Testando promoções de marketingQual promoção foi a mais eficaz?**Cenário:**Uma cadeia de fast food planeja adicionar um novo item ao seu menu. No entanto, eles ainda estão indecisos entre três possíveis campanhas de marketing para promover o novo produto. Para determinar qual promoção tem maior efeito nas vendas, o novo item é introduzido em vários locais em  mercados selecionados aleatoriamente. Uma promoção diferente é usada em cada local e as vendas semanais do novo item são registradas nas primeiras quatro semanas**A descrição do conjunto de dados:**Nosso conjunto de dados consiste em 548 entradas, incluindo:- MarketId: uma tag interna usada para descrever tipos de mercado, não a usaremos- AgeOfStores: idade da loja em anos (1 a 28). A idade média de uma loja é de 8,5 anos.- LocationID: identificador exclusivo para localização da loja. Cada local é identificado por um número. O número total de lojas é 137.- Promoção: uma das três promoções testadas (1, 2, 3). Realmente não sabemos os detalhes de cada promoção.- Vendas em milhares: valor de vendas para um LocationID, promoção e semana específicos. O valor médio das vendas é de 53,5 mil dólares.- Tamanho do mercado: existem três tipos de tamanho de mercado: pequeno, médio e grande.- Semana: uma das quatro semanas em que as promoções foram realizadas (1 a 4).<jupyter_code>import pandas as pd
import matplotlib.pyplot as plt


file_name = "https://raw.githubusercontent.com/rajeevratan84/datascienceforbusiness/master/WA_Fn-UseC_-Marketing-Campaign-Eff-UseC_-FastF.csv"
df = pd.read_csv(file_name)

df.head(10)<jupyter_output><empty_output><jupyter_text>> Algumas estatísticas.  Análise Explolatória de Dados<jupyter_code>print ("Rows     : " , df.shape[0])
print ("Columns  : " , df.shape[1])
print ("\nFeatures : \n", df.columns.tolist())
print ("\nMissing values :  ", df.isnull().sum().values.sum())
print ("\nUnique values :  \n", df.nunique())
df.describe()
df.info()
df.groupby('Promotion').sum()
plt.style.use('ggplot')
ax = df.groupby('Promotion').sum()['SalesInThousands'].plot.pie(figsize=(8,8),
                                                                autopct='%1.0f%%',
                                                                shadow=True,
                                                                explode = (0, 0.1, 0))
ax.set_ylabel('')
ax.set_title('Percentual de vendas em cada promoção')

plt.show()
plt.style.use('ggplot')
ax = df.groupby('Promotion').count()['SalesInThousands'].plot.pie(figsize=(8,8),
                                                                autopct='%1.0f%%',
                                                                shadow=True,
                                                                explode = (0, 0.1, 0))
ax.set_ylabel('')
ax.set_title('Percentual de ocorrência em cada promoção')

plt.show()<jupyter_output><empty_output><jupyter_text>> Quantidade de lojas agrupadas pelo tipo de promoção e tamanho do mercado em que elas atuam.<jupyter_code>df.groupby(['Promotion', 'MarketSize']).count()['MarketID']
import seaborn as sns

sns.scatterplot(x=df.AgeOfStore, y=df.SalesInThousands)
plt.show()<jupyter_output><empty_output><jupyter_text>Não encontramos nenhuma relação entre a idade da loja e a quantidade de vendas***> Número de lojas<jupyter_code>df.groupby(['Promotion', 'MarketSize']).count()['MarketID'].unstack('MarketSize')
ax = df.groupby(['Promotion', 'MarketSize']).count()['MarketID'].unstack('MarketSize').plot(
    kind='bar',
    figsize=(12,10),
    grid=True)

ax.set_ylabel('count')
ax.set_title('Detalhamento de tamanhos de mercado em diferentes promoções')

plt.show()<jupyter_output><empty_output><jupyter_text>> Plotando a mesma informação em outro gráfico.<jupyter_code>ax = df.groupby(['Promotion', 'MarketSize']).count()['MarketID'].unstack('MarketSize').plot(
    kind='bar',
    figsize=(12,10),
    grid=True,
    stacked=True)

ax.set_ylabel('count')
ax.set_title('Detalhamento de tamanhos de mercado em diferentes promoções')

plt.show()
ax = df.groupby('AgeOfStore').count()['MarketID'].plot(
    kind='bar', 
    figsize=(12,7),
    grid=True)

ax.set_xlabel('age')
ax.set_ylabel('count')
ax.set_title('Distribuição das idades das lojas')

plt.show()
ax = df.groupby(['AgeOfStore', 'Promotion']).count()['MarketID'].unstack('Promotion').iloc[::-1].plot(
    kind='barh', 
    figsize=(14,18),
    grid=True)

ax.set_ylabel('age')
ax.set_xlabel('count')
ax.set_title('Distribuições gerais de idade da loja')

plt.show()
df.groupby('Promotion').describe()['AgeOfStore']<jupyter_output><empty_output><jupyter_text>Essa tabela facilita o entendimento da distribuição geral das idades das lojas em nossas estatísticas resumidas.Todos os grupos de teste têm perfis etários semelhantes e a idade média das lojas é de ~ 8 a 9 anos para esses 3 grupos.A maioria das lojas tem entre 10 e 12 anos ou mais.Podemos ver que os perfis da loja são semelhantes entre si.Isso indica que nossos grupos de amostras são bem controlados e os resultados dos testes A / B serão significativos e confiáveis.***  A/B Testing<jupyter_code>means = df.groupby('Promotion').mean()['SalesInThousands']
stds = df.groupby('Promotion').std()['SalesInThousands']
ns = df.groupby('Promotion').count()['SalesInThousands']
print(means)
print(stds)
print(ns)<jupyter_output>Promotion
1    58.099012
2    47.329415
3    55.364468
Name: SalesInThousands, dtype: float64
Promotion
1    16.553782
2    15.108955
3    16.766231
Name: SalesInThousands, dtype: float64
Promotion
1    172
2    188
3    188
Name: SalesInThousands, dtype: int64<jupyter_text>Aqui fica evidente que mesmo apresentado um valor maior de vendas a promoção 3 tem uma média inferior quando relacionamos com o numero de promoções.*****Valor T**O valor t mede o grau de diferença em relação à variação em nossos grupos de dados. Valores t grandes indicam um maior grau de diferença entre os grupos.**Valor P**O valor P mede a probabilidade de os resultados ocorrerem por acaso. Portanto, quanto menor o valor de p, maior a diferença estatisticamente significativa entre os dois grupos. Comparando a promoção 1 x a promoção 2 em um teste A / B<jupyter_code># Computing the t and p values using scipy 
from scipy import stats

t, p = stats.ttest_ind(df.loc[df['Promotion'] == 1, 'SalesInThousands'].values,
                       df.loc[df['Promotion'] == 2, 'SalesInThousands'].values, 
                       equal_var=False)
print("t-value = " +str(t))
print("p-value = " +str(p))<jupyter_output>t-value = 6.42752867090748
p-value = 4.2903687179871785e-10<jupyter_text>Análise dos valores P e T  Nosso **P-Value está próximo de 0**, o que sugere que há boas evidências para **REJEITAR a Hipótese Nula**. Significando que existe uma diferença estatística entre os dois grupos. Nossas rejeições de limiar Nulo geralmente são menores que 0,05.Nosso **teste t** mostra que os desempenhos de marketing desses dois grupos são significativamente diferentes e que o grupo de promoção 1 supera o grupo de promoção 2. Comparando a promoção 1 x a promoção 3 em um teste A / BAgora vamos notar que, se executarmos um teste t entre o grupo de promoção 1 e o grupo de promoção 3, veremos resultados diferentes:<jupyter_code>t, p = stats.ttest_ind(
    df.loc[df['Promotion'] == 1, 'SalesInThousands'].values, 
    df.loc[df['Promotion'] == 3, 'SalesInThousands'].values, 
    equal_var=False)

print("t-value = " +str(t))
print("p-value = " +str(p))<jupyter_output>t-value = 1.5560224307758634
p-value = 0.12059147742229478
{'fraction_non_alphanumeric': 0.11086122502976584, 'fraction_numerical': 0.029368964148696917, 'mean_word_length': 3.899546338302009, 'pattern_counts': {'":': 0, '<': 30, '<?xml version=': 0, '>': 34, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 12, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '140991', 'license': 'MIT', 'n_tokens_mistral': 2766, 'n_tokens_neox': 2566, 'n_words': 764, 'path': '9 - Teste AB para vendas de Fast Food.ipynb', 'repo_name': 'maods2/DataScience-Projects', 'size': '7559'}