import numpy as np
import pandas as pd
import glob
views_df = pd.read_csv('/content/drive/MyDrive/PersonalProjects/NetflixData/DatosNetflix/VectorizedData/VectorizedPCA.csv',index_col=0)
views_df
#Creamos la matriz
temp_df = views_df.groupby(['Title','x','y','z','User']).count().reset_index()
net_matrix = temp_df.pivot_table(values='Count', index=['Title','x','y','z'], columns='User', fill_value=0).reset_index()
net_matrix
modelling(net_matrix, target_variable='n6', ignore='Title')
Split Listo
La proporción entre clases es: 119.00746268656717
Best Threshold=0.170943, G-Mean=0.940
La matriz de confusión:
[[1676 96]
[ 2 13]]
Un ejemplo de árbol de decisión.
AUC Score: 0.9062452972159519
%%capture
test_df = modelling(net_matrix, 'n6', 'Title',get_data=True)
falsos_positivos = test_df.loc[(test_df['Resultado']<=0.5) & (test_df['Prediccion']>=0.5)]
falsos_negativos = test_df.loc[(test_df['Resultado']>=0.5) & (test_df['Prediccion']<=0.5)]
verdaderos_positivos = test_df.loc[(test_df['Resultado']>=0.5) & (test_df['Prediccion']>=0.5)]
verdaderos_negativos = test_df.loc[(test_df['Resultado']<=0.5) & (test_df['Prediccion']<=0.5)]
verdaderos_positivos.head(2)
vistos = verdaderos_positivos.join(net_matrix['Title'])
vistos['Franchise'] = [title.split(':')[0] for title in vistos['Title'].astype('str')] # List comprenhension
#Agrupación por franquicias, se ordenan según las más vistas, y solo se muestran las primeras 10
series_vistas = vistos[['Franchise','Prediccion']].groupby('Franchise').sum().sort_values(by='Prediccion', ascending=False)
series_vistas.head(10)
falsos_positivos.head(2)
recomendations = falsos_positivos.join(net_matrix['Title'])
recomendations.head(2)
recomendations[['Title','Prediccion']].groupby('Title').sum()
recomendations['Franchise'] = [title.split(':')[0] for title in recomendations['Title'].astype('str')] # List comprenhension
#Agrupación por franquicias, se ordenan según las más recomendadas, y solo se muestran las primeras 10
series_recomendadas = recomendations[['Franchise','Prediccion']].groupby('Franchise').sum().sort_values(by='Prediccion', ascending=False)
series_recomendadas.head(10)
len(series_recomendadas)
test_full = test_df.join(net_matrix['Title'])
test_full['Franchise'] = [title.split(':')[0] for title in test_full['Title'].astype('str')] # List comprenhension
# Resultado == 0 serían series que el usuario aún no ha visto, si la predicción es 1 el modelo la recomienda, de lo contrario no
unview_f = test_full.loc[test_full['Resultado']==0,['Franchise','Prediccion']]
unview_f.groupby('Franchise').mean().sort_values(by='Prediccion',ascending=False).head(10)
recomendaciones = unview_f.groupby('Franchise').mean().sort_values(by='Prediccion',ascending=False)
len(recomendaciones.loc[recomendaciones['Prediccion']!=0])
recomendaciones.loc[recomendaciones['Prediccion']!=0].join(series_recomendadas['Prediccion'],how='left',lsuffix='_promedio',rsuffix='_conteo').head(10)