<jupyter_start><jupyter_text>Propuesta de trabajoPresentación grupal, puede ser utilizando diapositivas o jupyter lab.1. Presentación de los datos, definición de variables y contexto de la problemática. (10 puntos): 2. ¿Cuál es la pregunta que desean resolver? (5 puntos) :3. Análisis estadístico de los datos. (15 puntos):4. Visualización de variables. (15 puntos)5. ¿Hay que realizar preprocesamiento? (15 puntos)6. ¿Hay que realizar inputación de datos faltantes? (15 puntos)7. ¿Hay que realizar balanceo de datos? (15 puntos)8. Propuesta de cuatro modelos y sus hiperparámetros asociados. (20 puntos)  1. Presentación de los datos  Contexto Para las compañías de tarjetas de créditos es importante poder reconocer las transacciones fraudulentas para así evitar problemas legales, perdidas económicas y perdida de confianza de sus usuarios. En septiembre de 2013 durante dos días se tomaron datos de transacciones realizadas por titulares europeos. En estos dos días ocurrieron 492 fraudes de un total de 284.807 transacciones.Por temas de confidencialidad no conocemos las características originales ni información a fondo de los datos. Los datos que tenemos se obtuvieron de una transformación PCA (análisis de componentes principales). Esta transformación es una técnica utilizada para describir un conjunto de datos en términos de nuevas variables ("componentes") no correlacionadas. Los componentes se ordenan por la cantidad de varianza original que describen, por lo que la técnica es útil para reducir la dimensionalidad de un conjunto de datos. En nuestro caso se obtuvieron 28 componentes, llamadas $V_1,V_2,\cdots,V_{28}$. Aparte de las variables obtenidas por el PCA se tiene la variable Time que mide la diferencia de tiempo en segundos desde la primera transacción, la variable Amount que mide la cantidad de dinero transferido y la variable binaria Class que toma el valor 1 si el dato corresponde a un fraude y 0 sino.![fraude](https://www.eastwestbank.com/ReachFurther/NewsArticleStore/519/Credit-card-fraud-top.jpg)<jupyter_code>df = (
    pd.read_csv(Path().resolve().parent / "data" / "creditcard.csv")
    )
df.head(20)
df.shape
df.info()
round(100 * (df.isnull().sum()/len(df)),2).sort_values(ascending=False) 
df.describe().T<jupyter_output><empty_output><jupyter_text>Podemos notar que las variables V1..V28, están ordenadas decrecientemente respecto a su desviación estándar, y sus valores son cercanos a 0. La cantidad promedio de dinero transferido es $88<jupyter_code>df_copy=df.copy()
df_copy.drop_duplicates(subset=None, inplace=True)
df.shape
df_copy.shape
df=df_copy<jupyter_output><empty_output><jupyter_text>2.Pregunta A partir de la información recopilada, que tan preciso se pueden hacer modelos predictivos para ver si una transacción es un fraude o no fraude  3.Análisis de Datos y visualización  Distribución de variables  Class<jupyter_code>Nfrauds= len(df.loc[lambda x: x["Class"]==1])
Nnormals =len(df.loc[lambda x: x["Class"]==0])
total= Nfrauds + Nnormals
Fraud_percent= (Nfrauds / total)*100
Normal_percent= (Nnormals / total)*100

print("El numero de transacciones no fraudulentas (class 0) es: ", Nnormals)
print("El numero de transacciones fraudulentas (Class 1) es: ", Nfrauds)
print("Porcentaje transacciones no fraudulentas = ", Normal_percent)
print("Porcentaje transacciones fraudulentas= ", Fraud_percent)
sns.countplot('Class', data=df)
plt.title('Class Distributions \n (0: No Fraud || 1: Fraud)', fontsize=14)<jupyter_output><empty_output><jupyter_text>Amount y Time<jupyter_code>fig, ax = plt.subplots(1, 2, figsize=(18,4))

amount_val = df['Amount'].values
time_val = df['Time'].values

sns.distplot(amount_val, ax=ax[0], color='r')
ax[0].set_title('Distribution of Transaction Amount', fontsize=14)
ax[0].set_xlim([min(amount_val), max(amount_val)])

sns.distplot(time_val, ax=ax[1], color='b')
ax[1].set_title('Distribution of Transaction Time', fontsize=14)
ax[1].set_xlim([min(time_val), max(time_val)])



plt.show()<jupyter_output><empty_output><jupyter_text>Variables Fraude vs No fraude<jupyter_code>fraude= df.loc[lambda x: x["Class"]==1]
alt.Chart(fraude).mark_point().encode(
    x=alt.X("Time",axis=alt.Axis(title="Time")),
    y=alt.Y("Amount",axis=alt.Axis(title="Amount")),
).properties(
    title='Time vs Amount en fraudes',
    width=300,
    height=300
)
corr= df.corr()
f = plt.figure(figsize=(15, 15))
plt.matshow(df.corr(), fignum=f.number)
plt.xticks(range(df.shape[1]), df.columns, fontsize=14, rotation=45)
plt.yticks(range(df.shape[1]), df.columns, fontsize=14)
cb = plt.colorbar()
cb.ax.tick_params(labelsize=14)
plt.title('Correlation Matrix', fontsize=16);<jupyter_output><empty_output><jupyter_text>Matrix Plot<jupyter_code>def data_chart(col1, col2):
    data= fraude[[col1,col2]]
    chart = alt.Chart(data).mark_point().encode(
        x=col1,
        y=col2
    ).properties(
        width=800,
        height=400
    )
    chart.display()
    return

var1_widget = widgets.Dropdown(
    options=['Time', 'V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7', 'V8', 'V9', 'V10',
       'V11', 'V12', 'V13', 'V14', 'V15', 'V16', 'V17', 'V18', 'V19', 'V20',
       'V21', 'V22', 'V23', 'V24', 'V25', 'V26', 'V27', 'V28', 'Amount',
       'Class'],
    description="Variable 1",
    continuous_update=False
)

var2_widget = widgets.Dropdown(
    options=['Time', 'V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7', 'V8', 'V9', 'V10',
       'V11', 'V12', 'V13', 'V14', 'V15', 'V16', 'V17', 'V18', 'V19', 'V20',
       'V21', 'V22', 'V23', 'V24', 'V25', 'V26', 'V27', 'V28', 'Amount',
       'Class'],
    description= "Variable 2",    
    continuous_update=False
)

dashboard = interactive(
    data_chart,
    col1=var1_widget,
    col2=var2_widget
)
dashboard<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1318986463033669, 'fraction_numerical': 0.039569593891010064, 'mean_word_length': 5.417594654788418, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 25, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '449998', 'license': 'MIT', 'n_tokens_mistral': 2200, 'n_tokens_neox': 2065, 'n_words': 578, 'path': 'project/Proyecto.ipynb', 'repo_name': 'Flipom/mat281_portfolio', 'size': '5762'}