En el fondo de toda aplicación y todo desarrollo de Machine Learning y de Inteligencia Artificial (IA) se encuentra un concepto matemático fundamental: los vectores.
Estas estructuras permiten representar cualquier tipo de dato de manera numérica. Al representar vectorialmente datos complejos como texto, imágenes, secuencias de video o datos tabulares, podemos realizar diferentes tipos de operaciones matemáticas.
Y la similitud del coseno es, precisamente, una de estas operaciones entre vectores. Esta similitud del coseno es un concepto muy usado en diferentes aplicaciones de Machine Learning e IA. Por ejemplo, es el motor detrás de sistemas de reconocimiento facial, reconocimiento de voz, agentes de Inteligencia Artificial, sistemas RAG y de búsqueda semántica y sistemas de recomendación, entre otros
Así que en este artículo veremos en detalle qué es y en qué consiste la similitud del coseno, cómo se calcula matemáticamente paso a paso y cuáles son las diferentes aplicaciones prácticas donde la podemos encontrar.
¿Qué es un vector en el Machine Learning?
Para comprender la similitud del coseno, primero debemos entender qué es un vector en el contexto del Machine Learning.
Esencialmente, un vector es una manera compacta de representar un dato numéricamente.
Para entender esto, veamos algunos ejemplos prácticos, desde los más sencillos hasta los más complejos.
Supongamos que recolectamos datos de diferentes personas para construir un modelo de Machine Learning. Por cada persona recolectamos dos variables: la edad y el peso. Si una persona tiene 25 años y pesa 56 kg, estas dos variables las podemos almacenar en un listado numérico de dos elementos. Ese listado numérico es precisamente un vector. El primer elemento (25) corresponde a la edad y el segundo (56) al peso:

Y si vamos un poco más allá en este ejemplo, podríamos adquirir más variables de ese grupo de personas, como por ejemplo la altura.
Así, al recolectar la edad, el peso y la altura, estas tres variables se pueden almacenar en un vector de tres dimensiones, que tendrá precisamente tres elementos, donde cada uno representa una característica específica de la persona:

Teniendo en cuenta estos dos primeros ejemplos, podemos entonces decir que los vectores nos permiten almacenar datos tabulares (o datos en formato de tabla), como por ejemplo la edad, altura y peso de varias personas.
Pero los vectores pueden ser usados en sistemas mucho más complejos, por ejemplo aquellos basados en Redes Convolucionales usadas para el procesamiento de imágenes.
Por ejemplo, si le presentamos a un sistema de Visión por Computador una imagen de un rostro humano, la Red Convolucional de este sistema extrae la información relevante de esa imagen para identificar al sujeto y representa esa información como un vector.
En este caso, el vector tendrá muchas más dimensiones, por ejemplo, 512 dimensiones o elementos. A esta representación vectorial de características esenciales se le conoce como embedding y permite diferenciar un rostro de otros. Es decir, estos vectores los podemos usar para implementar sistemas de reconocimiento facial:

Y otro ejemplo es el uso de vectores en los sistemas basados en Grandes Modelos de Lenguaje (o LLMs por sus siglas en Inglés: Large Language Models).
Por ejemplo, si tenemos un texto y queremos hacer una búsqueda sobre el mismo, los LLMs lo representan internamente usando algo similar a los embeddings de imágenes, pero diseñados específicamente para texto. Un bloque de texto puede representarse con vectores de 4092 dimensiones o más, capturando la información y el significado esencial del texto:

Este tipo de aplicación se conoce como búsqueda semántica y es de hecho la base de lo que hoy conocemos como sistemas RAG.
Así que, en esencia, los vectores son las estructuras numéricas que son la base de muchas aplicaciones de Machine y Deep Learning y de IA en general.
Intuición geométrica: similitud entre dos vectores
Teniendo claro el concepto de vector, entendamos ahora de manera intuitiva el concepto de similitud entre dos vectores. Para ello, volveremos a nuestro ejemplo inicial de dos variables: edad y peso.
Supongamos que obtenemos estas dos variables para tres personas diferentes y las almacenamos en tres vectores:

- Persona 1 (Vector 1): [25 años, 68.2 kg.]
- Persona 2 (Vector 2): [82 años, 95.3 kg.]
- Persona 3 (Vector 3): [32 años, 71.3 kg.]
Si queremos determinar el grado de similitud entre estos vectores (es decir, qué personas son más parecidas en términos de edad y peso), la intuición nos dice que la Persona 1 y la Persona 3 se parecen más, debido a que tienen edades y pesos similares. Por el contrario, la Persona 2 se diferencia bastante de las otras dos por tener una edad (82 años) y un peso (95.3 kg) mucho mayores.
Representación gráfica en el plano
Para entender esta similitud más en detalle, podemos representar gráficamente estos tres vectores.
Como nuestros vectores tienen dos dimensiones (edad y peso), dibujaremos un plano cartesiano en dos dimensiones. En este plano, asignaremos la edad al eje horizontal (X) y el peso al eje vertical (Y).
A continuación, representamos cada vector como una flecha que parte desde el origen del plano (0,0) hasta el punto de intersección de sus variables:
![Comparación gráfica de los vectores [edad, peso] para tres personas diferentes. Podemos ver que los vectores más cercanos (p1 y p3, en verde) tienen un menor ángulo entre sí que por ejemplo el existente entre el vector 2 (en rojo) y cualquiera de los otros dos vectores](https://codificandobits.com/media/comparacion-grafica-vectores-2d.webp)
Al analizar este gráfico, nos preguntamos: ¿cuáles vectores se asemejan más y cuáles se diferencian más?
Visualmente es evidente que el Vector 1 y el Vector 3 están muy cerca el uno del otro.
Pero ¿cómo podemos medir esta cercanía? A través del ángulo que se forma entre los dos vectores.
- El ángulo entre el Vector 1 y el Vector 3 es bastante pequeño, lo que nos permite concluir que son bastante similares.
- Si comparamos el Vector 1 con el Vector 2, el ángulo de separación es significativamente mayor. No se asemejan tanto.
- De igual manera, al comparar el Vector 3 con el Vector 2, observamos que el ángulo también es relativamente grande.
Por tanto, los vectores 1 y 3 son similares porque su ángulo de separación es pequeño, mientras que el vector 2 difiere de ambos porque sus ángulos relativos son mayores.
Esta es la idea intuitiva de lo que es el grado de similitud entre vectores desde el punto de vista geométrico.
Formulación matemática de la Similitud del Coseno
Muy bien, teniendo clara la idea básica de la similitud entre vectores, veamos cómo calcular la Similitud del Coseno.
Y para ello usaremos una ecuación proveniente del Álgebra Lineal, un área de las matemáticas que es uno de los pilares de la Ciencia de Datos..
La similitud del coseno siempre se calcula entre pares de vectores. Así que, dados dos vectores, que llamaremos $A$ y $B$, la ecuación se define de la siguiente manera:
$$ \text{Similitud del Coseno}(A, B) = \frac{A \cdot B}{||A|| \times ||B||} =Cos(\theta_{A,B})$$
Desglosemos esta ecuación:
- El numerador ($A \cdot B$): es el resultado del producto punto entre los dos vectores. Es una operación sencilla que da como resultado un único número escalar (en un momento veremos un ejemplo numérico)
- El denominador ($||A|| \times ||B||$): consiste en el producto de las magnitudes o normas de los vectores (las barras verticales indican magnitud). Al multiplicarlas, obtenemos otro número escalar.
- Y al dividir el numerador obtenido en (1) entre el denominador (2) obtenemos precisamente el coseno del ángulo entre los dos vectores correspondiente a la expresión $Cos(\theta_{A,B})$ del lado derecho de la anterior ecuación.
Y de hecho, este resultado final es la misma similitud del coseno, que es exactamente igual al coseno del ángulo entre los dos vectores.
¿Qué significa el valor obtenido?
Recordemos nuestra gráfica:
- Cuando dos vectores son muy similares, el ángulo entre ellos es muy pequeño, muy cercano a cero. Matemáticamente, el coseno de un ángulo muy cercano a 0 es prácticamente igual a 1.
- Si el ángulo es más grande (los vectores difieren), el coseno del ángulo tenderá a 0.
En conclusión: entre más similares sean los vectores, la similitud del coseno tendrá un valor muy cercano a 1, mientras que entre más difieran, el valor será más cercano a 0.
Ejemplo numérico paso a paso
Vamos a poner en práctica lo que acabamos de ver calculando la similitud del coseno para nuestro ejemplo de las tres personas, donde el primer elemento de cada vector es la edad y el segundo elemento es el peso.
Paso 1: cálculo de las magnitudes
La magnitud de un vector se calcula tomando cada uno de sus elementos, elevándolos al cuadrado, sumándolos y extrayendo la raíz cuadrada del resultado total.
Veamos este cálculo para cada vector:
- Magnitud del Vector 1:
$$ ||V1|| = \sqrt{25^2 + 68.2^2} = 72.6 $$ - Magnitud del Vector 2:
$$ ||V2|| = \sqrt{82^2 + 95.3^2} = 125.7 $$ - Magnitud del Vector 3:
$$ ||V3|| = \sqrt{32^2 + 71.3^2} = 78.2 $$
Paso 2: cálculo de la similitud entre pares de vectores
Para calcular el producto punto en el numerador, multiplicamos los elementos correspondientes de cada vector (el primero con el primero, el segundo con el segundo) y sumamos los resultados.
1. Comparación entre Vector 1 y Vector 3 (los más similares intuitivamente):
- Numerador (Producto punto): $(25 \times 32) + (68.2 \times 71.3)$
- Denominador (Producto de magnitudes): $72.6 \times 78.2$
- Similitud del Coseno = $\frac{(25 \times 32) + (68.2 \times 71.3)}{72.6 \times 78.2} = \mathbf{0.997}$
Este valor de 0.997 es extremadamente cercano a 1, lo cual coincide matemáticamente con nuestra representación gráfica que nos indica que los dos vectores son casi idénticos en su dirección.
2. Comparación entre Vector 1 y Vector 2 (altamente diferentes):
- Numerador: $(25 \times 82) + (68.2 \times 95.3)$
- Denominador: $72.6 \times 125.7$
- Similitud del Coseno = $\frac{(25 \times 82) + (68.2 \times 95.3)}{72.6 \times 125.7} = \mathbf{0.936}$
Vemos que el valor de 0.936 es claramente inferior al 0.997 obtenido en la comparación anterior.
3. Comparación entre Vector 2 y Vector 3:
- Numerador: $(82 \times 32) + (95.3 \times 71.3)$
- Denominador: $125.7 \times 78.2$
- Similitud del Coseno = $\frac{(82 \times 32) + (95.3 \times 71.3)}{125.7 \times 78.2} = \mathbf{0.958}$
Este valor es mayor que la comparación de V1-V2 (0.936), pero inferior a la comparación de V1-V3 (0.997).
Ranking de similitud
Si organizamos los resultados en un ranking basado en el grado de similitud calculado:
- Primer Lugar (los más cercanos): Vector 1 y Vector 3 (0.997).
- Segundo Lugar: Vector 2 y Vector 3 (0.950).
- Tercer Lugar (los más alejados): Vector 1 y Vector 2 (0.936).
Esto confirma numéricamente lo que ya habíamos visto gráficamente. ¡Y esto es la similitud del coseno!
De hecho, este mismo tipo de cálculo es el que se aplica computacionalmente a vectores que tengan cientos o miles de dimensiones en diferentes tipos de aplicaciones, de las cuales hablaremos a continuación.
Aplicaciones de la Similitud del Coseno en el Machine Learning y la Inteligencia Artificial (IA)
La similitud del coseno tiene un amplio rango de aplicaciones en el Machine Learning y la IA, entre las que se incluyen:
1. Sistemas de Recomendación
Cuando plataformas como YouTube nos sugieren videos, Spotify nos hace una «playlist» de canciones o Amazon nos muestra libros similares a los que hemos leído o que otros usuarios han visto, en el fondo todas estas aplicaciones están usando la similitud del coseno.
Estos sistemas de recomendación toman tu historial de consumo, generan un «perfil» tuyo representado vectorialmente y comparan tu vector con el vector de perfil de millones de otros usuarios usando precisamente la similitud del coseno.
Al encontrar coincidencias de vectores cercanos a 1, el sistema te sugiere contenido de alta relevancia basado en esas similitudes.
2. Sistemas de reconocimiento facial
Cuando un sistema biométrico toma una imagen de un rostro humano e intenta verificar si la persona es quien dice ser, convierte la imagen capturada en una representación vectorial única (embedding).
Posteriormente, el sistema no compara pixel por pixel, sino que busca en una base de datos la representación vectorial de referencia. Usando la similitud del coseno, verifica el grado de cercanía; si el valor supera un umbral estricto, la identidad se confirma positivamente.
De hecho, en el tutorial de reconocimiento facial vemos precisamente este principio aplicado de forma práctica.
3. Sistemas de Generación Aumentada por Recuperación (RAG)
Los sistemas RAG (Retrieval-Augmented Generation) operan junto a los Grandes Modelos de Lenguaje.
Cuando consultamos un documento extenso a través de un chat y escribimos una pregunta, el sistema convierte la pregunta en un vector y busca, mediante similitud del coseno, cuáles son las porciones o párrafos de texto (también vectorizados) que más se acercan a la pregunta. Tras encontrar las respuestas, el modelo de lenguaje redacta la respuesta final.
De hecho, en el curso de búsqueda semántica con LLMs, disponible acá en la Academia Online, vemos precisamente cómo se implementa esta búsqueda que permite identificar los documentos más relevantes para una pregunta (lo que se conoce como recuperación densa o dense retrieval).
Conclusión
La similitud del coseno es una operación matemática fundamental que nos permite cuantificar el grado de similitud entre cualquier par de vectores.
Así, dos vectores muy similares tendrán una similitud del coseno muy cercana a 1, mientras que dos vectores diametralmente diferentes tendrán una similitud cercana a 0.
Y este sencillo concepto de Álgebra Lineal es la base de funcionamiento de muchas herramientas de Machine Learning e IA usadas en la actualidad, como el reconocimiento facial, los agentes conversacionales RAG y los algoritmos de recomendación implementados por diferentes plataformas y servicios que usamos a diario.
