<jupyter_start><jupyter_text>**A base de dados foi utilizado do seguinte site.**https://www.kaggle.com/loveall/clicks-conversion-tracking/data**Detalles y significado de cada Columna**1.) **ad_id:** un ID único para cada anuncio.2.) **xyz_campaign_id:** un ID asociado con cada campaña publicitaria de la empresa XYZ.3.) **fb_campaign_id:** una identificación asociada con la forma en que Facebook rastrea cada campaña.4.) **age:** edad de la persona a quien se muestra el anuncio.5.) **gender:** se muestra el género de la persona que desea agregar6.) **interest:** un código que especifica la categoría a la que pertenece el interés de la persona (los intereses son los mencionados en el perfil público de Facebook de la persona).7.) **Impressions:** la cantidad de veces que se mostró el anuncio.8.) **Clicks:** número de clics para ese anuncio.9.) **spent:** Monto pagado por la empresa xyz a Facebook, para mostrar ese anuncio.10.) **Total_Conversion:** número total de personas que consultaron sobre el producto después de ver el anuncio.11.) **Aproved_Conversion:** número total de personas que compraron el producto después de ver el anuncio.** Algoritmos **Mínimos quadrados.<jupyter_code>import pandas as pd
import numpy as np
import missingno
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
import statsmodels.api as sm

from sklearn.linear_model import LinearRegression
df = pd.read_csv('KAG_conversion_data.csv')
df.head(5)<jupyter_output><empty_output><jupyter_text>Cambiando nombre de features<jupyter_code>df.ad_id.value_counts().max() #Verificando que cada ID de cada sea único. 
df.rename(columns= {'ad_id': 'id_anuncio', 'xyz_campaign_id': 'id_campanha', 'fb_campaign_id':'id_fb_campanha', 'age':'idade', 'gender':'genero', 
                    'intereset':'interesse', 'Impressions':'numero_exibicoes', 'Clicks':'cliques_no_anuncio', 'Spent':'valor_pago_anuncio',
                    'Total_Conversion':'conversao', 'Approved_Conversion':'compras'}, inplace=True)
df.columns<jupyter_output><empty_output><jupyter_text>Verificando datos faltantes o nulos<jupyter_code>df.shape 
df.info()
df.describe()
df.isnull().sum()
df.isna().sum()
missingno.matrix(df, figsize= (30,10))  #caso tenha dados faltantes vai mostrar<jupyter_output><empty_output><jupyter_text>Analizando datos<jupyter_code>df.compras.value_counts()
#visualizando quantidade de registros por idade
plt.figure(figsize=(20,5))
sns.countplot(y='idade', data=df)
sns.boxplot(df['compras'])
plt.show()
#correlação de Pearson, para verificar features con maio correlação entre as mesmas
plt.figure(figsize=(12,10))
corr = df.corr()
sns.heatmap(corr, annot=True, cmap=plt.cm.Reds)
plt.show()
#gráfico de dispersión
sns.pairplot(df, x_vars=['valor_pago_anuncio'], y_vars=['cliques_no_anuncio'], height=4, kind='scatter')
plt.show()
#Mesmo grrafico com uma amostra da df total
amostra= df.sample(n=200)
sns.pairplot(amostra, x_vars=['valor_pago_anuncio'], y_vars=['cliques_no_anuncio'], height=4, kind='scatter')
plt.show()<jupyter_output><empty_output><jupyter_text>Iniciando Modelo<jupyter_code>#Separando as variaveis para o algoritmo
X = df['valor_pago_anuncio']
y = df['cliques_no_anuncio']

#separando os dados para treinamento y teste
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
X_train_sm = sm.add_constant(X_train)
X_train_sm.head()
#Entrenamiento del modelo

lr = sm.OLS(y_train, X_train_sm).fit()
lr.params
lr.summary()
# y = a * x + b
y_equacao = 0.6558 * X_train + -0.1498

plt.scatter(X_train, y_train) #plotando os dados de treinamento
plt.plot(X_train, y_equacao, 'r') #plotando a reta resultado do modelo 
plt.show()
X_train.head()
y_train.head()
#Tamanho do treino
print(f'Tamanho do treino {len(X_train)}, y corresponde a {(len(X_train)/len(df))*100}')

#Tamanho do treino
print(f'Tamanho do teste {len(X_test)}, y corresponde a {(len(X_test)/len(df))*100}')

#Tamanho do dataframe origina
print(f'Tamanho do teste {len(df)}')


#Redifiniendo las variables en arrays para que la reggresion linear funcione
X_train = np.array(X_train).reshape(-1,1)
X_test = np.array(X_test).reshape(-1,1)
y_train = np.array(y_train).reshape(-1,1) 
y_test = np.array(y_test).reshape(-1,1)
#importando y declarando regresao linear
modelo = LinearRegression()

#treinando o modelo
modelo.fit(X_train, y_train)<jupyter_output><empty_output><jupyter_text>Verificando os 2 modelos<jupyter_code>print(f'coeficiento do modelo Sklear {modelo.coef_}')
print(f'coeficiento do modelo Sklear {modelo.intercept_}')

# y = a * x + b
y_equacao = 0.6558 * X_train + -0.1498<jupyter_output><empty_output><jupyter_text>Podemos ver que o resultado do algoritmos do StatsModels teve o mesmo resultado que o algoritmos do Scikit Learning, tanto no coeficiente como no valor intercept, ou como seja tanto no "a" como no "b" Façendo 1º previsão<jupyter_code>valor_investimento = 5
modelo.predict([[valor_investimento]])<jupyter_output><empty_output><jupyter_text>Resultado acima diz que para um investimento de 5 Reais obteremos 3 cliques na nossa campanha de marketing Façendo uma previsão de retorno em cliques para um invesitmendo de 1000 R$<jupyter_code>valor_investimento = 1000
modelo.predict([[valor_investimento]])<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11918659386179627, 'fraction_numerical': 0.015439653549237431, 'mean_word_length': 6.610315186246418, 'pattern_counts': {'":': 0, '<': 33, '<?xml version=': 0, '>': 33, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 3, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '244607', 'license': 'MIT', 'n_tokens_mistral': 2064, 'n_tokens_neox': 1975, 'n_words': 507, 'path': 'Campanha_Marketing.ipynb', 'repo_name': 'fkrausse/ML_para_Marketing', 'size': '5311'}