|
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 |