continental_predictivo / prediction_analyzer.py
jcmachicao's picture
Upload prediction_analyzer.py
9f312ed verified
raw
history blame
1.49 kB
import torch
import numpy as np
import pandas as pd
class PredictionAnalyzer:
def __init__(self, model, df_ready):
self.model = model
self.df_ready = df_ready
def predictions_loop(self):
pred_total = []
for filter_cat in list(self.df_ready.columns):
df_sample = self.df_ready[self.df_ready[filter_cat]==1]
lb_sample = len(df_sample)/len(self.df_ready)
X = df_sample.values
X_test_tensor = torch.tensor(X, dtype=torch.float32)
inputs = X_test_tensor
outputs = self.model(inputs)
outputs_show = outputs.detach().numpy().flatten()
outputs_show[outputs_show > 0.55] = 1.0
outputs_show[outputs_show < 0.45] = 0.0
filtered_arr = outputs_show[(outputs_show == 0.0) | (outputs_show == 1.0)]
unique, counts = np.unique(filtered_arr, return_counts=True)
if len(counts) > 1:
sum_cat = counts[0]+counts[1]
pred_total.append([filter_cat, round(counts[0]/sum_cat*100, 2), round(counts[1]/sum_cat*100, 2), round(lb_sample*100, 2)])
else:
pred_total.append([filter_cat, 0, 0, round(lb_sample*100, 2)])
pred_df_tot = pd.DataFrame(pred_total, columns=['Categoria', 'Pred==0', 'Pred==1', 'linea_base'])
pred_df_tot_sort = pred_df_tot.sort_values(by='Pred==1', ascending=False, ignore_index=True)
return pred_df_tot_sort