GMARTINEZMILLA commited on
Commit
f74ef3b
1 Parent(s): 3c8f378

feat: Translated Summary to Spanish

Browse files
Files changed (1) hide show
  1. utils.py +10 -30
utils.py CHANGED
@@ -10,61 +10,42 @@ from sklearn.preprocessing import normalize
10
 
11
 
12
 
13
- def recomienda_tf(new_basket, cestas, productos):
14
-
15
-
16
- # Cargar la matriz TF-IDF y el modelo
17
- tf_matrix = load('tf_matrix.joblib')
18
- # MAtriz que tienen cada columna los diferentes artículos y las diferentes cestas en las filas
19
- # Los valores son la importancia de cada artículo en la cesta según las veces que aparece en la misma y el total de artículos
20
  count = load('count_vectorizer.joblib')
21
-
22
  # Convertir la nueva cesta en formato TF (Term Frequency)
23
  new_basket_str = ' '.join(new_basket)
24
  new_basket_vector = count.transform([new_basket_str])
25
- new_basket_tf = normalize(new_basket_vector, norm='l1') # Normalizamos la matriz count de la cesta actual
26
-
27
  # Comparar la nueva cesta con las anteriores
28
- # Calculando la distancia coseoidal, distancia entre rectas
29
  similarities = cosine_similarity(new_basket_tf, tf_matrix)
30
- # La similitud coseno devuelve un valor entre 0 y 1, donde 1 significa
31
- # que las cestas son idénticas en términos de productos y 0 que no comparten ningún producto.
32
-
33
  # Obtener los índices de las cestas más similares
34
- # Muestra los índices de Las 3 cestas más parecidas atendiendo a la distancia calculada anteriormente
35
  similar_indices = similarities.argsort()[0][-4:] # Las 4 más similares
36
-
37
  # Crear un diccionario para contar las recomendaciones
38
  recommendations_count = {}
39
  total_similarity = 0
40
-
41
  # Recomendar productos de cestas similares
42
  for idx in similar_indices:
43
  sim_score = similarities[0][idx]
44
- # sim_score es el valor de similitud de la cesta actual con la cesta similar.
45
- total_similarity += sim_score # Suma de las similitudes entre 0 y el nº de cestas similares
46
  products = cestas.iloc[idx]['Cestas'].split()
47
-
48
  # Usar un conjunto para evitar contar productos múltiples veces en la misma cesta
49
  unique_products = set(products) # Usar un conjunto para obtener productos únicos
50
-
51
- for product in products:
52
  if product.strip() not in new_basket: # Evitar recomendar lo que ya está en la cesta
53
  recommendations_count[product.strip()] = recommendations_count.get(product.strip(), 0) + sim_score
54
- # se utiliza para incrementar el conteo del producto en recommendations_count.
55
- # almacena el conteo de la relevancia de cada producto basado en cuántas veces aparece en las cestas similares, ponderado por la similitud de cada cesta.
56
- # sumandole sim_score se incrementa el score cuando la cesta es mas similar
57
-
58
  # Calcular la probabilidad relativa de cada producto recomendado
59
  recommendations_with_prob = []
60
  if total_similarity > 0: # Verificar que total_similarity no sea cero
61
  recommendations_with_prob = [(product, score / total_similarity) for product, score in recommendations_count.items()]
62
- # Se guarda cada producto junto su score calculada
63
  else:
64
  print("No se encontraron similitudes suficientes para calcular probabilidades.")
65
 
66
  recommendations_with_prob.sort(key=lambda x: x[1], reverse=True) # Ordenar por puntuación
67
-
68
  # Crear un nuevo DataFrame para almacenar las recomendaciones
69
  recommendations_data = []
70
 
@@ -77,7 +58,6 @@ def recomienda_tf(new_basket, cestas, productos):
77
  'DESCRIPCION': description.values[0], # Obtener el primer valor encontrado
78
  'RELEVANCIA': score
79
  })
80
-
81
  recommendations_df = pd.DataFrame(recommendations_data)
82
 
83
- return recommendations_df
 
10
 
11
 
12
 
13
+ def recomienda_tf(new_basket,cestas,productos):
14
+ # Cargar la matriz TF y el modelo
15
+ tf_matrix = load('tf_matrix.joblib')
16
+
 
 
 
17
  count = load('count_vectorizer.joblib')
 
18
  # Convertir la nueva cesta en formato TF (Term Frequency)
19
  new_basket_str = ' '.join(new_basket)
20
  new_basket_vector = count.transform([new_basket_str])
21
+ new_basket_tf = normalize(new_basket_vector, norm='l1') # Normalizamos la matriz count de la cesta actual
 
22
  # Comparar la nueva cesta con las anteriores
 
23
  similarities = cosine_similarity(new_basket_tf, tf_matrix)
 
 
 
24
  # Obtener los índices de las cestas más similares
 
25
  similar_indices = similarities.argsort()[0][-4:] # Las 4 más similares
 
26
  # Crear un diccionario para contar las recomendaciones
27
  recommendations_count = {}
28
  total_similarity = 0
 
29
  # Recomendar productos de cestas similares
30
  for idx in similar_indices:
31
  sim_score = similarities[0][idx]
32
+ total_similarity += sim_score # Suma de las similitudes
 
33
  products = cestas.iloc[idx]['Cestas'].split()
 
34
  # Usar un conjunto para evitar contar productos múltiples veces en la misma cesta
35
  unique_products = set(products) # Usar un conjunto para obtener productos únicos
36
+ # Con esto evitamos que la importancia crezca por las unidades
37
+ for product in unique_products:
38
  if product.strip() not in new_basket: # Evitar recomendar lo que ya está en la cesta
39
  recommendations_count[product.strip()] = recommendations_count.get(product.strip(), 0) + sim_score
40
+ # Almacena el conteo de la relevancia de cada producto basado en cuántas veces aparece en las cestas similares, ponderado por la similitud de cada cesta.
 
 
 
41
  # Calcular la probabilidad relativa de cada producto recomendado
42
  recommendations_with_prob = []
43
  if total_similarity > 0: # Verificar que total_similarity no sea cero
44
  recommendations_with_prob = [(product, score / total_similarity) for product, score in recommendations_count.items()]
 
45
  else:
46
  print("No se encontraron similitudes suficientes para calcular probabilidades.")
47
 
48
  recommendations_with_prob.sort(key=lambda x: x[1], reverse=True) # Ordenar por puntuación
 
49
  # Crear un nuevo DataFrame para almacenar las recomendaciones
50
  recommendations_data = []
51
 
 
58
  'DESCRIPCION': description.values[0], # Obtener el primer valor encontrado
59
  'RELEVANCIA': score
60
  })
 
61
  recommendations_df = pd.DataFrame(recommendations_data)
62
 
63
+ return recommendations_df