Modelado News-Clustering

Modelado News-Clustering#

#!pip install umap-learn==0.5.6
import warnings
warnings.filterwarnings("ignore")

import pandas as pd
import plotly.express as px
from umap import UMAP
from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.model_selection import RandomizedSearchCV
from sklearn.pipeline import Pipeline
from sklearn.mixture import GaussianMixture
from sklearn.manifold import TSNE
from sklearn.metrics import silhouette_score, davies_bouldin_score

url_base = "https://raw.githubusercontent.com/lacamposm/Metodos-Estadisticos/main/data/"
def silhouette_scorer(estimator, X):
    """
    Calcula el Silhouette Score utilizando la métrica de coseno para evaluar la calidad de los clústeres.

    El Silhouette Score mide cómo de similar es un punto de datos a otros puntos de su mismo clúster en comparación
    con los puntos de otros clústeres. El valor oscila entre -1 y 1, donde un valor más alto indica que los puntos
    están mejor agrupados y más separados de otros clústeres.

    :param estimator: Un modelo de clustering que debe tener un método `predict` para obtener las etiquetas de los
    clústeres de las muestras de `X`.
    :param X: Un array-like o matriz de datos (n_samples, n_features) sobre los cuales se calcularán los clústeres.
    :return: El Silhouette Score para el conjunto de datos `X` y las etiquetas de los clústeres obtenidos del
    `estimator`. Se utiliza la métrica de coseno para calcular las distancias.
    """
    if not hasattr(estimator, "predict"):
        raise ValueError(f"El estimator: {estimator} no tiene metodo 'predict'")

    labels = estimator.predict(X)
    return silhouette_score(X, labels, metric="cosine")


def davies_bouldin_scorer(estimator, X):
    """
    Calcula el índice de Davies-Bouldin para evaluar la calidad de los clústeres.

    El índice de Davies-Bouldin mide la media del cociente entre las distancias intra-clúster e inter-clúster para cada
    clúster. Un valor más bajo del índice indica una mejor formación de los clústeres, ya que minimiza la dispersión
    dentro de los clústeres y maximiza la separación entre ellos.

    :param estimator: Un modelo de clustering que debe tener un método `predict` para obtener las etiquetas de los
    clústeres de las muestras de `X`.
    :param X: Un array-like o matriz de datos (n_samples, n_features) sobre los cuales se calcularán los clústeres.
    :return: El valor negativo del índice de Davies-Bouldin para el conjunto de datos `X` y las etiquetas de los
    clústeres obtenidos del `estimator`. Esto invierte la métrica para que pueda maximizarse en las búsquedas
    de hiperparámetros.
    """
    if not hasattr(estimator, "predict"):
        raise ValueError(f"El estimator: {estimator} no tiene metodo 'predict'")

    labels = estimator.predict(X)
    score = -davies_bouldin_score(X, labels)
    return score
def transform_dict_best_model(input_dict):
    """
    Transforma un diccionario de parámetros de un modelo en un nuevo formato más estructurado.

    Esta función toma un diccionario que contiene información sobre un modelo, incluyendo un preprocesador, un método
    de reducción de dimensiones y un agrupador (clusterer), junto con sus parámetros específicos. La función reorganiza
    esta información en un formato más accesible y fácil de usar.

    :param input_dict: Un diccionario que contiene los parámetros del modelo. Debe incluir las claves "preprocessor",
    "dim_reduction", y "clusterer", así como pares clave-valor para los parámetros del agrupador y la reducción de
    dimensiones que siguen el formato "clusterer__<param_name>" y "dim_reduction__<param_name>".
    :return: Un nuevo diccionario estructurado que contiene el preprocesador, la reducción de dimensiones, el agrupador,
    y los parámetros asociados a cada uno. La clave de los parámetros de agrupador y    de reducción de dimensiones
    se simplifica eliminando el prefijo correspondiente.
    """
    return {
        "preprocessor": input_dict["preprocessor"],
        "dim_reduction": input_dict["dim_reduction"],
        "clusterer": input_dict["clusterer"],
        "clusterer_params": {
            k.split("__")[-1]: v for k, v in input_dict.items()
            if k.startswith("clusterer__")
        },
        "dim_reduction_params": {
            k.split("__")[-1]: v for k, v in input_dict.items()
            if k.startswith("dim_reduction__")
        }
    }
    

def tsne_plot_2d(df, estimator=None, scorer=None, metric=None):
    """
    Genera un gráfico 2D utilizando t-SNE para visualizar embeddings en un espacio reducido.

    Esta función aplica un preprocesador a un DataFrame, seguido de una reducción de dimensionalidad mediante t-SNE.
    Se pueden visualizar los embeddings resultantes en un gráfico, con la opción de agregar etiquetas de clúster para
    distinguir diferentes grupos en los datos.

    :param df: DataFrame que contiene los datos a visualizar. Cada fila representa una observación y cada columna
    representa una característica o variable.
    :param estimator:
    :param scorer:
    :param metric
    """
    if estimator is not None:
        params_estimator = transform_dict_best_model(estimator.get_params())
        preprocessor = params_estimator.get("preprocessor")
        dim_reduction = params_estimator.get("dim_reduction")
        clusterer = params_estimator.get("clusterer")
        best_score = scorer(estimator, df)

        if isinstance(dim_reduction, PCA):
            pipeline = Pipeline([
                ("preprocessor", preprocessor),
                ("dim_reduction", dim_reduction),
            ])

            normalized_embeddings = pipeline.fit_transform(df)

        else:
            normalized_embeddings = preprocessor.fit_transform(df)

        tsne = TSNE(n_components=2, random_state=42, metric=metric)
        df_plot = pd.DataFrame(tsne.fit_transform(normalized_embeddings), columns=["tSNE1", "tSNE2"])
        df_plot["cluster"] = estimator.predict(df) + 1
        df_plot = df_plot.sort_values(by=["cluster"])
        df_plot["cluster"] = df_plot["cluster"].astype("string")
        title = (
            f"""<b>Clustering: News-Summary-Embeddings in Low dimension with t-SNE</b><br>"""
            f"""<span style='font-size: 11px;'>Scaler: {preprocessor.__class__.__name__}, """
            f"""Dim-Reduction: {dim_reduction.__class__.__name__}, Estimator: {clusterer.__class__.__name__}, Metric """
            f"""Plot: {metric}, Scorer Metric: {scorer.__name__}={best_score:.3f}</span>"""
        )
        color = "cluster"

    else:
        df_scaled = StandardScaler().fit_transform(df)
        tsne = TSNE(n_components=2, random_state=42, metric=metric)
        df_plot = pd.DataFrame(tsne.fit_transform(df_scaled), columns=["tSNE1", "tSNE2"])
        title = (
            f"""<b>News-Summary-Embeddings in Low dimension with t-SNE</b><br>"""
            f"""<span style='font-size: 10px;'>Scaler: {StandardScaler().__class__.__name__}"""
        )
        color = None

    (
        px.scatter(
            df_plot, x="tSNE1", y="tSNE2", color=color,
            title=title,
            opacity=0.8,
            color_discrete_sequence=px.colors.qualitative.Dark24,
            template="plotly_white"
        )
        .update_traces(marker=dict(size=3))
        .show()
    )
    

def umap_plot_2d(df, estimator=None, scorer=None, metric=None):
    """
    Función que genera un gráfico en 2D utilizando UMAP y muestra los clústeres.

    :param df: pd.DataFrame con los embeddings de los resumenes de las noticias).
    :param estimator:
    :param scorer:
    :param metric
    """
    if estimator is not None:
        params_estimator = transform_dict_best_model(estimator.get_params())
        preprocessor = params_estimator.get("preprocessor")
        dim_reduction = params_estimator.get("dim_reduction")
        clusterer = params_estimator.get("clusterer")
        best_score = scorer(estimator, df)

        if isinstance(dim_reduction, UMAP):
            df_scaled = preprocessor.fit_transform(df)
            dim_reduction.n_components = 2
            df_plot = pd.DataFrame(dim_reduction.fit_transform(df_scaled), columns=["UMAP1", "UMAP2"])
        else:
            pipeline = Pipeline([
                ("preprocessor", preprocessor),
                ("dim_reduction", dim_reduction),
            ])
            df_scaled = pipeline.fit_transform(df)
            reducer = UMAP(n_components=2, random_state=42, metric=metric)
            df_plot = pd.DataFrame(reducer.fit_transform(df_scaled), columns=["UMAP1", "UMAP2"])

        df_plot["cluster"] = estimator.predict(df) + 1
        df_plot = df_plot.sort_values(by=["cluster"])
        df_plot["cluster"] = df_plot["cluster"].astype("string")
        color = "cluster"
        title = (
            f"""<b>Clustering: News-Summary-Embeddings in Low dimension with UMAP</b><br>"""
            f"""<span style='font-size: 11px;'>Scaler: {preprocessor.__class__.__name__}, """
            f"""Dim-Reduction: {dim_reduction.__class__.__name__}, Estimator: {clusterer.__class__.__name__}, Metric:"""
            f""" {metric}, Scorer Metric: {scorer.__name__}={best_score:.3f}</span>"""

        )

    else:
        df_scaled = StandardScaler().fit_transform(df)
        reducer = UMAP(n_components=2, random_state=42)
        df_plot = pd.DataFrame(reducer.fit_transform(df_scaled), columns=["UMAP1", "UMAP2"])
        title = (
            f"""<b>News-Summary-Embeddings in Low dimension with UMAP</b><br>"""
            f"""<span style='font-size: 10px;'>Scaler: {StandardScaler().__class__.__name__}"""
        )
        color = None

    (
        px.scatter(
            df_plot, x="UMAP1", y="UMAP2", color=color,
            title=title,
            opacity=0.8,
            color_discrete_sequence=px.colors.qualitative.Dark24,
            template="plotly_white"
        )
        .update_traces(marker=dict(size=3))
        .show()
    )
n_iter = 10                                     # Número de ajustes en RandomizedSearchCV.
scorers = ["silhouette", "davies-bouldin"]      # Puedes seleccionar diferentes metrica de adecuación de clusters
random_state = 42                               # Semilla aletoria de RandomizedSearchCV para replicar resultados.


scoring_dict = {
    "silhouette": silhouette_scorer,
    "davies-bouldin": davies_bouldin_scorer,
}


list_scalers = [StandardScaler(), MinMaxScaler(), RobustScaler()]

pca_n_components = [num for num in range(5, 80)]
umap_metrics = ["cosine", "correlation"]
umap_n_neighbors = [5, 10, 15]
umap_min_dist = [0.1, 0.3, 0.5]
umap_n_components = [2, 3, 4]

gauss_mix_n_components = [num for num in range(5, 13)]
gauss_mix_covariance_type = ["full", "diag"]
kmeans_n_clusters = [num for num in range(5, 21)]

param_grid = [
    {
        "preprocessor": list_scalers,
        "dim_reduction": [PCA()],
        "dim_reduction__n_components": pca_n_components,
        "clusterer": [KMeans()],
        "clusterer__n_clusters": kmeans_n_clusters,
    },
    {
        "preprocessor": list_scalers,
        "dim_reduction": [PCA()],
        "dim_reduction__n_components": pca_n_components,
        "clusterer": [GaussianMixture()],
        "clusterer__n_components": gauss_mix_n_components,
        "clusterer__covariance_type": gauss_mix_covariance_type
    },
    {
        "preprocessor": list_scalers,
        "dim_reduction": [UMAP()],
        "dim_reduction__n_neighbors": umap_n_neighbors,
        "dim_reduction__min_dist": umap_min_dist,
        "dim_reduction__n_components": umap_n_components,
        "dim_reduction__metric": umap_metrics,
        "clusterer": [KMeans()],
        "clusterer__n_clusters": kmeans_n_clusters,
    },
    {
        "preprocessor": list_scalers,
        "dim_reduction": [UMAP()],
        "dim_reduction__n_neighbors": umap_n_neighbors,
        "dim_reduction__min_dist": umap_min_dist,
        "dim_reduction__n_components": umap_n_components,
        "dim_reduction__metric": umap_metrics,
        "clusterer": [GaussianMixture()],
        "clusterer__n_components": gauss_mix_n_components,
        "clusterer__covariance_type": gauss_mix_covariance_type
    }
]


pipeline = Pipeline([
        ("preprocessor", "passthrough"),
        ("dim_reduction", "passthrough"),
        ("clusterer", "passthrough")
    ])

random_search = RandomizedSearchCV(
    pipeline,
    param_distributions=param_grid,
    scoring=scoring_dict,
    cv=2,
    n_jobs=-1,
    verbose=3,
    n_iter=n_iter,
    refit="silhouette",
    random_state=random_state
)
df_embed = pd.read_parquet(url_base + "mxbai-embed-large_summary_news_el_tiempo.parquet")
df_embed
0 1 2 3 4 5 6 7 8 9 ... 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023
url_page
https://www.eltiempo.com/mundo/latinoamerica/evo-morales-amenaza-con-bloquear-bolivia-si-la-fiscalia-lo-captura-3389757 -0.020917 -0.006987 -0.026591 0.017555 0.032127 -0.046068 -0.048087 0.004656 0.005598 0.049441 ... 0.028381 0.019583 0.007692 0.002656 0.050690 0.041930 0.001792 -0.013605 -0.002610 -0.016743
https://www.eltiempo.com/bogota/vehiculo-se-incendia-en-medio-de-la-carretera-en-fusagasuga-cundinamarca-bomberos-atienden-la-emergencia-3389756 -0.031880 0.027921 -0.016712 0.032918 0.024373 -0.010680 -0.058477 -0.027742 0.044773 0.041911 ... 0.048250 0.040552 -0.037708 0.000493 0.010013 0.003768 0.026349 0.010262 -0.003502 0.014081
https://www.eltiempo.com/mundo/eeuu-y-canada/esta-es-la-edad-en-la-que-un-adulto-mayor-debe-dejar-de-conducir-harvard-3389502 -0.021267 0.007155 0.034475 0.030611 -0.008942 -0.016378 -0.011049 -0.016557 0.039848 0.030022 ... 0.073989 0.016037 -0.018351 -0.029923 0.037829 -0.002450 -0.024424 0.009189 0.001148 -0.009378
https://www.eltiempo.com/mundo/europa/morire-en-prision-escribio-en-sus-memorias-el-opositor-ruso-alexei-navalni-3389755 -0.001724 -0.011231 0.006536 0.007330 0.013462 -0.022181 -0.013968 0.002475 0.010086 0.029852 ... 0.043627 0.040211 -0.020006 0.009449 0.054445 0.034426 -0.022466 -0.010860 -0.025343 -0.013328
https://www.eltiempo.com/colombia/otras-ciudades/alcaldia-de-villa-de-leyva-en-boyaca-entrega-balance-tras-el-vendaval-de-ese-sabado-hay-12-personas-heridas-3389752 -0.015240 0.014905 0.014017 0.032451 0.006244 -0.013349 -0.052630 0.047903 0.035785 0.030179 ... -0.000029 0.047785 -0.012244 -0.007176 0.010913 0.012925 0.016821 0.001564 -0.004066 0.014183
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
https://www.eltiempo.com/mas-contenido/el-llamado-desde-el-sur-del-meta-3385783 -0.015249 0.032793 -0.022702 0.048635 -0.002823 -0.039297 -0.053139 0.034664 0.032758 0.025721 ... 0.027468 0.045833 -0.016872 -0.021523 0.025576 0.014999 -0.008812 -0.021739 -0.010349 0.009338
https://www.eltiempo.com/mundo/medio-oriente/asi-localizo-israel-al-lider-de-hezbola-los-detalles-del-operativo-de-inteligencia-para-efectuar-el-bombardeo-aereo-3385781 -0.013496 -0.014557 -0.018691 0.047176 0.018366 -0.011003 -0.093697 0.026669 -0.002839 -0.000249 ... 0.032180 -0.000164 -0.033964 -0.035739 0.008483 0.055563 -0.048210 -0.003561 0.001201 -0.018963
https://www.eltiempo.com/mas-contenido/del-crudo-al-turismo-3385901 -0.024780 0.041507 0.002410 0.001920 -0.007972 0.006983 -0.026574 0.025248 0.020038 0.037295 ... 0.042184 0.043891 -0.024159 -0.011424 0.054588 -0.006380 0.002650 -0.021769 -0.050148 0.003720
https://www.eltiempo.com/mas-contenido/el-imponente-tesoro-verde-3385938 -0.013511 0.009672 -0.010728 0.041266 0.003864 0.014097 -0.032700 0.034680 0.065962 0.033704 ... 0.052577 0.008840 0.002960 0.019802 0.011811 0.018858 -0.007259 -0.019385 -0.031452 0.014297
https://www.eltiempo.com/mas-contenido/los-trinos-que-mejor-silban-en-la-sabana-3385940 0.015330 0.010940 0.012188 -0.021195 0.031553 -0.026548 -0.064843 0.015146 0.036667 -0.002814 ... 0.026943 0.041879 0.021138 -0.025357 0.017482 0.026049 -0.008655 -0.007465 -0.008995 0.012198

3551 rows × 1024 columns

tsne_plot_2d(df_embed, metric="cosine")
umap_plot_2d(df_embed, metric="cosine")
best_model = random_search.fit(df_embed)
Fitting 2 folds for each of 10 candidates, totalling 20 fits
[CV 2/2] END clusterer=GaussianMixture(), clusterer__covariance_type=diag, clusterer__n_components=8, dim_reduction=PCA(), dim_reduction__n_components=68, preprocessor=MinMaxScaler(); davies-bouldin: (test=-3.141) silhouette: (test=-0.031) total time=   4.4s
[CV 2/2] END clusterer=GaussianMixture(), clusterer__covariance_type=full, clusterer__n_components=12, dim_reduction=PCA(), dim_reduction__n_components=10, preprocessor=MinMaxScaler(); davies-bouldin: (test=-3.661) silhouette: (test=0.065) total time=   3.3s
[CV 1/2] END clusterer=GaussianMixture(), clusterer__covariance_type=diag, clusterer__n_components=8, dim_reduction=PCA(), dim_reduction__n_components=68, preprocessor=MinMaxScaler(); davies-bouldin: (test=-3.638) silhouette: (test=0.081) total time=   3.9s
[CV 1/2] END clusterer=KMeans(), clusterer__n_clusters=8, dim_reduction=PCA(), dim_reduction__n_components=66, preprocessor=RobustScaler(); davies-bouldin: (test=-3.344) silhouette: (test=0.111) total time=   5.2s
[CV 1/2] END clusterer=GaussianMixture(), clusterer__covariance_type=diag, clusterer__n_components=6, dim_reduction=PCA(), dim_reduction__n_components=41, preprocessor=MinMaxScaler(); davies-bouldin: (test=-3.477) silhouette: (test=0.056) total time=   5.3s
[CV 1/2] END clusterer=GaussianMixture(), clusterer__covariance_type=full, clusterer__n_components=12, dim_reduction=PCA(), dim_reduction__n_components=10, preprocessor=MinMaxScaler(); davies-bouldin: (test=-3.537) silhouette: (test=0.094) total time=   5.3s
[CV 2/2] END clusterer=GaussianMixture(), clusterer__covariance_type=diag, clusterer__n_components=6, dim_reduction=PCA(), dim_reduction__n_components=41, preprocessor=MinMaxScaler(); davies-bouldin: (test=-3.190) silhouette: (test=-0.069) total time=   4.8s
[CV 2/2] END clusterer=GaussianMixture(), clusterer__covariance_type=full, clusterer__n_components=12, dim_reduction=PCA(), dim_reduction__n_components=76, preprocessor=RobustScaler(); davies-bouldin: (test=-3.453) silhouette: (test=0.058) total time=   7.5s
[CV 1/2] END clusterer=KMeans(), clusterer__n_clusters=7, dim_reduction=PCA(), dim_reduction__n_components=10, preprocessor=MinMaxScaler(); davies-bouldin: (test=-3.796) silhouette: (test=0.093) total time=   3.0s
[CV 2/2] END clusterer=KMeans(), clusterer__n_clusters=8, dim_reduction=PCA(), dim_reduction__n_components=66, preprocessor=RobustScaler(); davies-bouldin: (test=-3.260) silhouette: (test=0.101) total time=   5.9s
[CV 2/2] END clusterer=KMeans(), clusterer__n_clusters=7, dim_reduction=PCA(), dim_reduction__n_components=10, preprocessor=MinMaxScaler(); davies-bouldin: (test=-3.490) silhouette: (test=0.088) total time=   3.6s
[CV 1/2] END clusterer=GaussianMixture(), clusterer__covariance_type=full, clusterer__n_components=12, dim_reduction=PCA(), dim_reduction__n_components=76, preprocessor=RobustScaler(); davies-bouldin: (test=-3.542) silhouette: (test=0.076) total time=   7.6s
[CV 2/2] END clusterer=GaussianMixture(), clusterer__covariance_type=full, clusterer__n_components=8, dim_reduction=PCA(), dim_reduction__n_components=55, preprocessor=MinMaxScaler(); davies-bouldin: (test=-3.394) silhouette: (test=0.065) total time=   4.2s
[CV 1/2] END clusterer=GaussianMixture(), clusterer__covariance_type=full, clusterer__n_components=8, dim_reduction=PCA(), dim_reduction__n_components=55, preprocessor=MinMaxScaler(); davies-bouldin: (test=-3.354) silhouette: (test=0.086) total time=   4.9s
[CV 1/2] END clusterer=KMeans(), clusterer__n_clusters=5, dim_reduction=UMAP(), dim_reduction__metric=cosine, dim_reduction__min_dist=0.5, dim_reduction__n_components=3, dim_reduction__n_neighbors=15, preprocessor=MinMaxScaler(); davies-bouldin: (test=-4.267) silhouette: (test=0.072) total time= 2.8min
[CV 2/2] END clusterer=KMeans(), clusterer__n_clusters=5, dim_reduction=UMAP(), dim_reduction__metric=cosine, dim_reduction__min_dist=0.5, dim_reduction__n_components=3, dim_reduction__n_neighbors=15, preprocessor=MinMaxScaler(); davies-bouldin: (test=-4.668) silhouette: (test=0.060) total time= 2.8min
[CV 2/2] END clusterer=GaussianMixture(), clusterer__covariance_type=diag, clusterer__n_components=10, dim_reduction=UMAP(), dim_reduction__metric=cosine, dim_reduction__min_dist=0.5, dim_reduction__n_components=3, dim_reduction__n_neighbors=10, preprocessor=StandardScaler(); davies-bouldin: (test=-3.735) silhouette: (test=0.068) total time= 2.9min
[CV 2/2] END clusterer=GaussianMixture(), clusterer__covariance_type=diag, clusterer__n_components=6, dim_reduction=UMAP(), dim_reduction__metric=cosine, dim_reduction__min_dist=0.3, dim_reduction__n_components=2, dim_reduction__n_neighbors=15, preprocessor=MinMaxScaler(); davies-bouldin: (test=-4.152) silhouette: (test=0.070) total time= 2.9min
[CV 1/2] END clusterer=GaussianMixture(), clusterer__covariance_type=diag, clusterer__n_components=10, dim_reduction=UMAP(), dim_reduction__metric=cosine, dim_reduction__min_dist=0.5, dim_reduction__n_components=3, dim_reduction__n_neighbors=10, preprocessor=StandardScaler(); davies-bouldin: (test=-3.982) silhouette: (test=0.099) total time= 2.9min
[CV 1/2] END clusterer=GaussianMixture(), clusterer__covariance_type=diag, clusterer__n_components=6, dim_reduction=UMAP(), dim_reduction__metric=cosine, dim_reduction__min_dist=0.3, dim_reduction__n_components=2, dim_reduction__n_neighbors=15, preprocessor=MinMaxScaler(); davies-bouldin: (test=-4.227) silhouette: (test=0.080) total time= 2.9min
best_model.best_estimator_
Pipeline(steps=[('preprocessor', RobustScaler()),
                ('dim_reduction', PCA(n_components=66)),
                ('clusterer', KMeans())])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
pd.DataFrame(best_model.cv_results_)
mean_fit_time std_fit_time mean_score_time std_score_time param_preprocessor param_dim_reduction__n_neighbors param_dim_reduction__n_components param_dim_reduction__min_dist param_dim_reduction__metric param_dim_reduction ... split0_test_silhouette split1_test_silhouette mean_test_silhouette std_test_silhouette rank_test_silhouette split0_test_davies-bouldin split1_test_davies-bouldin mean_test_davies-bouldin std_test_davies-bouldin rank_test_davies-bouldin
0 61.451363 0.641376 107.538870 0.217128 MinMaxScaler() 15.0 3 0.5 cosine UMAP() ... 0.071795 0.060500 0.066147 0.005648 8 -4.267171 -4.668142 -4.467657 0.200486 10
1 3.725260 0.844143 1.847641 0.498057 RobustScaler() NaN 66 NaN NaN PCA() ... 0.111457 0.100532 0.105995 0.005462 1 -3.343701 -3.259551 -3.301626 0.042075 1
2 5.758554 0.342652 1.820870 0.283193 RobustScaler() NaN 76 NaN NaN PCA() ... 0.075848 0.057526 0.066687 0.009161 7 -3.541835 -3.453316 -3.497576 0.044260 5
3 2.628685 0.579398 1.688401 0.410230 MinMaxScaler() NaN 10 NaN NaN PCA() ... 0.093768 0.064748 0.079258 0.014510 4 -3.536984 -3.660859 -3.598921 0.061937 6
4 61.116615 0.601326 111.256128 0.370988 StandardScaler() 10.0 3 0.5 cosine UMAP() ... 0.099070 0.068144 0.083607 0.015463 3 -3.981713 -3.735402 -3.858557 0.123156 8
5 62.002027 0.326131 111.037768 0.518493 MinMaxScaler() 15.0 2 0.3 cosine UMAP() ... 0.080206 0.070261 0.075233 0.004973 6 -4.226512 -4.151934 -4.189223 0.037289 9
6 3.070148 0.086945 1.979107 0.178444 MinMaxScaler() NaN 41 NaN NaN PCA() ... 0.056272 -0.069238 -0.006483 0.062755 10 -3.477332 -3.190424 -3.333878 0.143454 2
7 2.286027 0.184273 1.842155 0.061444 MinMaxScaler() NaN 68 NaN NaN PCA() ... 0.081023 -0.031090 0.024966 0.056056 9 -3.637915 -3.141201 -3.389558 0.248357 4
8 1.472808 0.029106 1.822065 0.295383 MinMaxScaler() NaN 10 NaN NaN PCA() ... 0.093114 0.087733 0.090423 0.002691 2 -3.795622 -3.490213 -3.642917 0.152704 7
9 3.484603 0.191882 1.100228 0.169730 MinMaxScaler() NaN 55 NaN NaN PCA() ... 0.086151 0.065150 0.075651 0.010500 5 -3.353578 -3.393720 -3.373649 0.020071 3

10 rows × 25 columns

labels = best_model.predict(df_embed)
labels
array([3, 2, 1, ..., 5, 5, 4], dtype=int32)
tsne_plot_2d(df_embed, best_model.best_estimator_, silhouette_scorer, "cosine")
umap_plot_2d(df_embed, best_model.best_estimator_, silhouette_scorer, "cosine")
pd.DataFrame(best_model.predict(df_embed) + 1, index=df_embed.index, columns=["cluster"])
cluster
url_page
https://www.eltiempo.com/mundo/latinoamerica/evo-morales-amenaza-con-bloquear-bolivia-si-la-fiscalia-lo-captura-3389757 4
https://www.eltiempo.com/bogota/vehiculo-se-incendia-en-medio-de-la-carretera-en-fusagasuga-cundinamarca-bomberos-atienden-la-emergencia-3389756 3
https://www.eltiempo.com/mundo/eeuu-y-canada/esta-es-la-edad-en-la-que-un-adulto-mayor-debe-dejar-de-conducir-harvard-3389502 2
https://www.eltiempo.com/mundo/europa/morire-en-prision-escribio-en-sus-memorias-el-opositor-ruso-alexei-navalni-3389755 5
https://www.eltiempo.com/colombia/otras-ciudades/alcaldia-de-villa-de-leyva-en-boyaca-entrega-balance-tras-el-vendaval-de-ese-sabado-hay-12-personas-heridas-3389752 3
... ...
https://www.eltiempo.com/mas-contenido/el-llamado-desde-el-sur-del-meta-3385783 6
https://www.eltiempo.com/mundo/medio-oriente/asi-localizo-israel-al-lider-de-hezbola-los-detalles-del-operativo-de-inteligencia-para-efectuar-el-bombardeo-aereo-3385781 7
https://www.eltiempo.com/mas-contenido/del-crudo-al-turismo-3385901 6
https://www.eltiempo.com/mas-contenido/el-imponente-tesoro-verde-3385938 6
https://www.eltiempo.com/mas-contenido/los-trinos-que-mejor-silban-en-la-sabana-3385940 5

3551 rows × 1 columns

Caracterizacion de los clusters#

import requests

response = requests.get(url_base + "octubre_news_summary.json")
data_json = response.json()

df_predict = pd.DataFrame(best_model.predict(df_embed) +1, index=df_embed.index, columns=["cluster"])
df_summary = pd.DataFrame(data=data_json.values(), index=data_json.keys(), columns=["summary"])
df_review = df_predict.merge(df_summary, left_index=True, right_index=True)
df_review
cluster summary
https://www.eltiempo.com/mundo/latinoamerica/evo-morales-amenaza-con-bloquear-bolivia-si-la-fiscalia-lo-captura-3389757 4 Evo Morales, expresidente de Bolivia, amenaza ...
https://www.eltiempo.com/bogota/vehiculo-se-incendia-en-medio-de-la-carretera-en-fusagasuga-cundinamarca-bomberos-atienden-la-emergencia-3389756 3 El Cuerpo de Bomberos de Cundinamarca atendió ...
https://www.eltiempo.com/mundo/eeuu-y-canada/esta-es-la-edad-en-la-que-un-adulto-mayor-debe-dejar-de-conducir-harvard-3389502 2 Los accidentes automovilísticos están en aumen...
https://www.eltiempo.com/mundo/europa/morire-en-prision-escribio-en-sus-memorias-el-opositor-ruso-alexei-navalni-3389755 5 Alexei Navalni, opositor ruso al presidente Vl...
https://www.eltiempo.com/colombia/otras-ciudades/alcaldia-de-villa-de-leyva-en-boyaca-entrega-balance-tras-el-vendaval-de-ese-sabado-hay-12-personas-heridas-3389752 3 Un fuerte vendaval sorprendió a los habitantes...
... ... ...
https://www.eltiempo.com/mas-contenido/el-llamado-desde-el-sur-del-meta-3385783 6 El acuerdo de paz con las Farc ha permitido la...
https://www.eltiempo.com/mundo/medio-oriente/asi-localizo-israel-al-lider-de-hezbola-los-detalles-del-operativo-de-inteligencia-para-efectuar-el-bombardeo-aereo-3385781 7 El viernes, un bombardeo aéreo israelí eliminó...
https://www.eltiempo.com/mas-contenido/del-crudo-al-turismo-3385901 6 El tema central es la transición energética en...
https://www.eltiempo.com/mas-contenido/el-imponente-tesoro-verde-3385938 6 El Meta enfrenta la amenaza de deforestación, ...
https://www.eltiempo.com/mas-contenido/los-trinos-que-mejor-silban-en-la-sabana-3385940 5 El Topo Solano y José David Oropeza son dos de...

3551 rows × 2 columns

def get_text_sample_by_cluster(label_cluster, size_sample):
    """
    """
    df = df_review.query("cluster == @label_cluster").sample(size_sample)
    text_to_llm = df["summary"].to_list()
    text_to_llm = text_to_llm = "\n".join([f"Noticia {i+1}\n{news}\n" for i, news in enumerate(text_to_llm)])
    print(text_to_llm)
    return text_to_llm

print(get_text_sample_by_cluster(2, 30))
Noticia 1
El informe de la Sociedad Española de Gastroenterología, Hepatología y Nutrición Pediátrica enfatiza la importancia de una alimentación balanceada para mantener el buen estado de salud. Se destaca la linaza como superalimento que contribuye a prevenir enfermedades autoinmunes, especialmente la artritis. Expertos recomiendan conocer el valor nutricional de los alimentos y evitar el sedentarismo y el estrés.

Noticia 2
El consumo del mango africano (Irvingia gabonensis) ha ganado atención por sus propiedades para reducir la grasa corporal y combatir la fatiga, según estudios. Las semillas, ricas en fibra soluble y antioxidantes, han sido objeto de investigación y se utilizan como suplemento natural. Expertos destacan su potencial para mejorar la salud general, aunque recomiendan consultar con profesionales de la salud antes del consumo.

Noticia 3
La Sociedad Colombiana de Cardiología y Cirugía Cardiovascular destaca los beneficios del ejercicio físico para las mujeres, incluyendo mejoras en condiciones como enfermedad cardiovascular y reducción de mortalidad prematura. Durante la menopausia, especialistas recomiendan actividades como el baile para mejorar la salud física y mental, según un estudio de la Universidad de Harvard. Este ejercicio beneficia la memoria, autoestima y controla colesterol y triglicéridos en sangre.

Noticia 4
El bilito, una fruta medicinal tropical, ha sido reconocida por sus múltiples propiedades beneficiosas para la salud, especialmente en el tratamiento de enfermedades respiratorias. Este árbol monoico nativo de América se utiliza tradicionalmente por diversas comunidades y ofrece diversos usos, desde aliviar síntomas de asma hasta combatir la osteoporosis. Expertos destacan sus propiedades antisépticas y cicatrizantes, así como su alto contenido en manitol que ayuda a reducir la hipertensión. Sin embargo, se recomienda incorporarlo con precaución en la dieta debido a sus efectos potenciales sobre el alzhéimer.

Noticia 5
El aumento del dolor de espalda en la población moderna, causado por el sedentarismo y el estrés, preocupa a expertos en salud. Santiago Kweitel, médico deportólogo, destaca que este problema es una de las razones más frecuentes de ausencia laboral. La dolencia afecta a ocho de cada diez personas y puede ser leve o punzante. Los factores de riesgo incluyen el estrés, el sedentarismo y la mala alimentación. Para prevenirlo, se recomiendan rutinas de estiramiento, pausas activas y ejercicios para fortalecer el core.

Noticia 6
El aumento global de casos de accidente cerebrovascular (ACV) es una preocupación reciente en salud pública. La Clínica Universidad de Navarra destaca los síntomas y causas subyacentes del ACV, mientras que el Instituto del Corazón de Texas resalta las consecuencias para los sobrevivientes. La fibrilación auricular, un ritmo cardíaco irregular, incrementa el riesgo de ACV según la Asociación Americana del Corazón. Expertos recomiendan monitorear la actividad cardíaca y adoptar estilos de vida saludables para prevenir estas afecciones.

Noticia 7
El Hospital Internacional de Colombia realizó una cirugía innovadora para una joven con cordoma, un raro tumor que afecta la columna vertebral y limita la movilidad. El neurocirujano Dr. Ludwing Badillo Ballesteros empleó odontectomía transoral, accediendo a través de la boca para remover el tumor sin dañar estructuras vitales. La paciente recuperó 95% de su movilidad y ya es independiente, aunque requiere controles constantes. Este procedimiento representa un avance significativo en el tratamiento de tumores similares.

Noticia 8
La salud capilar está estrechamente relacionada con los hábitos alimenticios y nutricionales. Según Harvard Health, factores como deficiencias de vitaminas y minerales, condiciones médicas y factores hormonales pueden desencadenar la caída del cabello o alopecia. Es crucial identificar y abordar cualquier deficiencia nutricional para prevenir y tratar esta condición. Vitamina D, hierro, biotina, vitamina C y zinc son esenciales para el crecimiento y fortaleza capilar. Un consumo excesivo de ciertos nutrientes puede ser perjudicial, por lo que se recomienda realizar análisis de sangre periódicamente.

Noticia 9
El síndrome de cabeza explosiva (EHS) es un fenómeno que se produce durante la transición entre la vigilia y el sueño, causando fuertes sonidos internos sin estímulos externos. Algunas personas experimentan alucinaciones visuales o sensaciones corporales. Dan Denis, psicólogo de la Universidad de York, sugiere que los insomnes o quienes se encuentran bajo presión son más susceptibles a este fenómeno. Aunque no existe un tratamiento, cambios en los hábitos de sueño pueden aliviar los síntomas.

Noticia 10
El consumo moderado de carne roja es recomendado por nutricionistas para una dieta equilibrada, aunque su exceso puede aumentar el colesterol y el riesgo cardiovascular. Según un estudio del departamento de Nutrición de la Universidad de Harvard, consumir más de 0,8 gramos de proteínas por kilogramo de peso corporal diariamente puede incrementar el riesgo de enfermedades cardiovasculares y cáncer. La directora del programa de artes culinarias de la Universidad de Drexel sugiere que las porciones adecuadas deben acompañarse con alimentos ricos en nutrientes para mantener una dieta sana.

Noticia 11
La jícama, un tubérculo rico en nutrientes, es versátil en su uso culinario y ofrece diversos beneficios para la salud, como mejorar la digestión, proteger el corazón y los huesos. Este alimento, originario de Mesoamérica, contiene inulina, fibra dietética y alta proporción de agua, lo que contribuye a la sensación de saciedad y hidratación del cuerpo. Además, es una excelente opción para personas con diabetes debido a su bajo contenido calórico y dulzor natural. Sin embargo, se recomienda consultar con un profesional de la salud antes de incorporarlo en la dieta, ya que cada persona tiene necesidades específicas.

Noticia 12
La menopausia puede causar sangrado de encías debido a cambios hormonales, lo que se relaciona con la gingivitis. Según la odontóloga Irene Esteve, este problema se combina con la xerostomía, o boca seca, que disminuye la producción de saliva y aumenta las infecciones bucales. Para mitigar estos síntomas, se recomienda usar humidificadores, respirar por la nariz y realizar revisiones dentales regulares. La menopausia también puede traer el "síndrome de la boca ardiente", que causa molestias en áreas como la lengua y encías. Buscar atención odontológica es crucial para manejar estos problemas y mantener una buena salud bucal durante esta etapa.

Noticia 13
El tema central de la noticia son los cambios biológicos y psicológicos comunes a partir de los 60 años. El doctor José María Pallarés destaca que las principales causas de muerte en esta edad son patologías crónicas relacionadas con el corazón, pulmones, sistema endocrino y tumores. Se recomienda mantener una dieta mediterránea y hacer chequeos médicos regulares para mitigar estos efectos.

Noticia 14
El tema central de la noticia es que ciertos alimentos pueden adquirir un sabor a refrigerador debido a los gases utilizados en estos equipos. El 'tiktoker' @Soycienciaycocina explicó que esto ocurre principalmente si los alimentos no están bien envueltos y el serpentín o bobina de enfriamiento está sucio, liberando componentes como hidrofluorocarbonos. Las consecuencias son que estos sabores desagradables pueden disuadir a las personas de consumir ciertos alimentos. El consejo es mantener la nevera limpia y guardar los alimentos herméticamente para prevenir este problema.

Noticia 15
El dermatólogo Dr. Daniel Asz Sigall desmiente el mito de que los shampoos causen caída del cabello. Según él, elegir el producto adecuado es crucial para cuidar el cuero cabelludo sin perjudicarlo. El especialista recomienda seleccionar shampoos específicos según el tipo de pelo y cuero cabelludo, y señala que la elección debe basarse en factores más allá del aroma o textura. Asimismo, destaca que cambios estacionales pueden influir en la caída del cabello, pero no es el shampoo quien causa problemas capilares significativos. La recomendación final es consultar a un dermatólogo ante cualquier preocupación sobre pérdida de cabello.

Noticia 16
La Oficina de Aduanas y Protección Fronteriza (CBP) advirtió sobre la prohibición de llevar huevos crudos y aves de corral desde México al entrar a Estados Unidos, en el marco del Día Internacional del Huevo. Las autoridades explicaron que esto se debe a riesgos de plagas y enfermedades. Aunque algunos productos con huevo envasados o cocinados pueden ingresar, los huevos crudos están estrictamente prohibidos. La CBP recordó la importancia de declarar todos los productos agrícolas al entrar al país para evitar sanciones.

Noticia 17
Una mujer en Florida afirmó que un batido de Chick-fil-A aceleró su trabajo de parto, volviéndose viral en TikTok. Anna Lundy aseguró que después de probar varios métodos naturales, bebió el batido y tuvo contracciones en menos de dos horas; su bebé nació al día siguiente. La Dra. Lauren F. Streicher desestimó la afirmación, explicando que muchos alimentos se han asociado erróneamente con la inducción del parto, y recomendó seguir las indicaciones médicas para una gestación segura.

Noticia 18
La Dra. Emma Qureshey, ginecóloga obstetra, ha advertido a través de TikTok sobre tres hábitos que podrían dañar la salud, especialmente el de orinar en la ducha. Asegura que esto puede debilitar el suelo pélvico y causar incontinencia. También recomienda evitar tratamientos caseros para infecciones vaginales, ya que pueden empeorar las condiciones. La doctora enfatiza la importancia de consultar a profesionales de la salud ante cualquier síntoma y ofrece recomendaciones básicas para prevenir infecciones urinarias.

Noticia 19
El aguacate, rico en ácido fólico y ácidos grasos omega-3, se ha destacado por sus beneficios para la salud mental según estudios del Departamento de Nutrición de la Universidad de Chile. Este alimento contribuye a la regulación del estado de ánimo y previene desequilibrios neuropsiquiátricos. Expertos recomiendan su inclusión en la dieta diaria, aunque subrayan la importancia de consultar con un profesional de la salud. Además de estos beneficios, el aguacate ofrece vitaminas y minerales que promueven la salud cardiovascular.

Noticia 20
Hipócrates recomendaba la miel como remedio natural para promover el bienestar y prolongar la vida. La Fundación Española de Nutrición destaca que contiene azúcares, aminoácidos, vitaminas, minerales y antioxidantes, con propiedades antiinflamatorias y antibacterianas. Investigaciones actuales confirman que reduce el colesterol LDL y previene enfermedades del corazón, mientras que estudios recientes muestran que ayuda a reducir la grasa en el hígado, protegiéndolo contra el estrés oxidativo.

Noticia 21
Dalton Cummins, quien sobrevivió al cáncer dos veces a los 24 años, ahora trabaja como enfermero en el Riley Hospital for Children donde fue paciente. Diagnósticado inicialmente con linfoma difuso de células B grandes y luego con linfoma de Hodgkin, Dalton superó intensivos tratamientos incluyendo quimioterapia y trasplante de células madre. Su experiencia personal lo motivó a trabajar en el mismo hospital que lo atendió, donde puede ayudar a otros pacientes oncológicos.

Noticia 22
El tema central de la noticia es un consejo dado por una dietista sobre hábitos a abandonar para lograr una pérdida de peso sostenible. Courtney Kassi, con 425.000 seguidores en TikTok, compartió cinco malos hábitos que deben ser eliminados, incluyendo evitar eventos sociales y adoptar una mentalidad negativa. Las implicaciones son importantes para quienes buscan cambiar su estilo de vida y pérdida de peso; sin un plan adecuado y la obsesión con la balanza diaria pueden llevar a resultados contraproducentes.

Noticia 23
El estudio de expertos de la Escuela de Medicina de Harvard identifica cinco formas de ejercicio para mantener una "salud de oro" a lo largo de la vida: natación, tai chi, entrenamiento de fuerza, caminatas y ejercicios de Kegel. La natación es recomendada para personas con artritis, mientras que el tai chi beneficia tanto al cuerpo como a la mente. El fortalecimiento muscular es crucial para prevenir caídas en personas mayores. Las caminatas son accesibles y ayudan a combatir enfermedades crónicas, y los ejercicios de Kegel mejoran la continencia urinaria y la salud sexual. Estas actividades promueven una mejor calidad de vida tanto física como mental.

Noticia 24
Siete Foods, una empresa fundada en 2014 por una familia mexicano-estadounidense, será adquirida por PepsiCo por US$1.200 millones para incorporar productos saludables inspirados en la cocina mexicana a su cartera. La transacción se espera cierre durante el primer semestre de 2025. Siete Foods ofrece tortillas, salsas y galletas hechas con ingredientes naturales y saludables, populares entre seguidores de dietas paleo o keto. PepsiCo destacó que los productos aportarán un aspecto nuevo a su cartera multicultural.

Noticia 25
Trabajadores portuarios en Estados Unidos iniciaron una huelga que podría afectar el comercio de alimentos y otros productos importados. Afectará principalmente plátanos, cerezas, mariscos y café, entre otros. La huelga, si persiste, podría generar escasez y subidas de precios para los consumidores en solo dos semanas. Expertos advierten que la situación podría alargarse hasta el próximo año si no se resuelve pronto, pero hay suministros de respaldo gracias a las lecciones aprendidas durante la pandemia.

Noticia 26
El artículo enfatiza la importancia de hábitos saludables para retrasar los signos del envejecimiento. Se recomiendan alimentos ricos en antioxidantes, como moras, uvas y arándanos, que protegen las células contra el estrés oxidativo. La Biblioteca Nacional de Medicina destaca estos compuestos naturales. Un licuado con estos ingredientes no solo es nutritivo, sino también refrescante, según propone el artículo, destacando sus beneficios para la salud cardiovascular y ósea, así como su efecto antiinflamatorio.

Noticia 27
Desde el inicio de 2024, las reclamaciones en servicios de salud han aumentado exponencialmente, especialmente en EPS intervenidas como Nueva EPS y Sanitas. La Supersalud reporta un incremento del 11,21% en quejas comparando agosto de este año con el mismo mes del año anterior. Las principales quejas se centran en el acceso a servicios y medicamentos, con un aumento del 49,7% en tutelas para procedimientos médicos y del 77,5% para suministro de medicamentos. El exministro Augusto Galán Sarmiento señala que la financiación estructural del sistema está deteriorada, mientras que Nueva EPS y Sanitas implementan estrategias para mejorar su red de servicios y entrega de medicamentos.

Noticia 28
El chontaduro, una fruta típica de Colombia, se destaca por sus propiedades nutricionales y beneficios para la salud. Este estudio realizado por la Universidad del Valle subraya su valor como fuente de proteínas, aceites, vitaminas liposolubles y minerales. Además, el chontaduro contiene vitamina A, C, antocianinas y betacarotenos, contribuyendo a mejorar problemas digestivos y disminuir inflamación. Sus beneficios incluyen cuidar la visión, combatir el estreñimiento, prevenir el envejecimiento prematuro y evitar la anemia.

Noticia 29
El 'youtuber' Sven Vee completó un desafío de pedalear dos horas diarias durante 30 días, recorriendo más de 2.000 kilómetros y notando mejoras en su resistencia y bienestar mental. Este ejemplo demuestra que la bicicleta fija puede ser una actividad simple pero efectiva para mejorar la salud. Expertos recomiendan un equilibrio moderado en el ejercicio para evitar posibles daños, destacando la importancia de la disciplina y la regularidad.

Noticia 30
El cerebro, compuesto por más de mil millones de neuronas, requiere cuidados como una dieta equilibrada, ejercicio y descanso adecuado para mantener su salud. La albahaca, destacada por su contenido en antioxidantes y compuestos biológicamente activos, se ha asociado con beneficios cognitivos y digestivos. Expertos recomiendan incluirla en la dieta a través de infusiones, pero aconsejan consultar con un profesional para adaptarla a las necesidades individuales.

Noticia 1
El informe de la Sociedad Española de Gastroenterología, Hepatología y Nutrición Pediátrica enfatiza la importancia de una alimentación balanceada para mantener el buen estado de salud. Se destaca la linaza como superalimento que contribuye a prevenir enfermedades autoinmunes, especialmente la artritis. Expertos recomiendan conocer el valor nutricional de los alimentos y evitar el sedentarismo y el estrés.

Noticia 2
El consumo del mango africano (Irvingia gabonensis) ha ganado atención por sus propiedades para reducir la grasa corporal y combatir la fatiga, según estudios. Las semillas, ricas en fibra soluble y antioxidantes, han sido objeto de investigación y se utilizan como suplemento natural. Expertos destacan su potencial para mejorar la salud general, aunque recomiendan consultar con profesionales de la salud antes del consumo.

Noticia 3
La Sociedad Colombiana de Cardiología y Cirugía Cardiovascular destaca los beneficios del ejercicio físico para las mujeres, incluyendo mejoras en condiciones como enfermedad cardiovascular y reducción de mortalidad prematura. Durante la menopausia, especialistas recomiendan actividades como el baile para mejorar la salud física y mental, según un estudio de la Universidad de Harvard. Este ejercicio beneficia la memoria, autoestima y controla colesterol y triglicéridos en sangre.

Noticia 4
El bilito, una fruta medicinal tropical, ha sido reconocida por sus múltiples propiedades beneficiosas para la salud, especialmente en el tratamiento de enfermedades respiratorias. Este árbol monoico nativo de América se utiliza tradicionalmente por diversas comunidades y ofrece diversos usos, desde aliviar síntomas de asma hasta combatir la osteoporosis. Expertos destacan sus propiedades antisépticas y cicatrizantes, así como su alto contenido en manitol que ayuda a reducir la hipertensión. Sin embargo, se recomienda incorporarlo con precaución en la dieta debido a sus efectos potenciales sobre el alzhéimer.

Noticia 5
El aumento del dolor de espalda en la población moderna, causado por el sedentarismo y el estrés, preocupa a expertos en salud. Santiago Kweitel, médico deportólogo, destaca que este problema es una de las razones más frecuentes de ausencia laboral. La dolencia afecta a ocho de cada diez personas y puede ser leve o punzante. Los factores de riesgo incluyen el estrés, el sedentarismo y la mala alimentación. Para prevenirlo, se recomiendan rutinas de estiramiento, pausas activas y ejercicios para fortalecer el core.

Noticia 6
El aumento global de casos de accidente cerebrovascular (ACV) es una preocupación reciente en salud pública. La Clínica Universidad de Navarra destaca los síntomas y causas subyacentes del ACV, mientras que el Instituto del Corazón de Texas resalta las consecuencias para los sobrevivientes. La fibrilación auricular, un ritmo cardíaco irregular, incrementa el riesgo de ACV según la Asociación Americana del Corazón. Expertos recomiendan monitorear la actividad cardíaca y adoptar estilos de vida saludables para prevenir estas afecciones.

Noticia 7
El Hospital Internacional de Colombia realizó una cirugía innovadora para una joven con cordoma, un raro tumor que afecta la columna vertebral y limita la movilidad. El neurocirujano Dr. Ludwing Badillo Ballesteros empleó odontectomía transoral, accediendo a través de la boca para remover el tumor sin dañar estructuras vitales. La paciente recuperó 95% de su movilidad y ya es independiente, aunque requiere controles constantes. Este procedimiento representa un avance significativo en el tratamiento de tumores similares.

Noticia 8
La salud capilar está estrechamente relacionada con los hábitos alimenticios y nutricionales. Según Harvard Health, factores como deficiencias de vitaminas y minerales, condiciones médicas y factores hormonales pueden desencadenar la caída del cabello o alopecia. Es crucial identificar y abordar cualquier deficiencia nutricional para prevenir y tratar esta condición. Vitamina D, hierro, biotina, vitamina C y zinc son esenciales para el crecimiento y fortaleza capilar. Un consumo excesivo de ciertos nutrientes puede ser perjudicial, por lo que se recomienda realizar análisis de sangre periódicamente.

Noticia 9
El síndrome de cabeza explosiva (EHS) es un fenómeno que se produce durante la transición entre la vigilia y el sueño, causando fuertes sonidos internos sin estímulos externos. Algunas personas experimentan alucinaciones visuales o sensaciones corporales. Dan Denis, psicólogo de la Universidad de York, sugiere que los insomnes o quienes se encuentran bajo presión son más susceptibles a este fenómeno. Aunque no existe un tratamiento, cambios en los hábitos de sueño pueden aliviar los síntomas.

Noticia 10
El consumo moderado de carne roja es recomendado por nutricionistas para una dieta equilibrada, aunque su exceso puede aumentar el colesterol y el riesgo cardiovascular. Según un estudio del departamento de Nutrición de la Universidad de Harvard, consumir más de 0,8 gramos de proteínas por kilogramo de peso corporal diariamente puede incrementar el riesgo de enfermedades cardiovasculares y cáncer. La directora del programa de artes culinarias de la Universidad de Drexel sugiere que las porciones adecuadas deben acompañarse con alimentos ricos en nutrientes para mantener una dieta sana.

Noticia 11
La jícama, un tubérculo rico en nutrientes, es versátil en su uso culinario y ofrece diversos beneficios para la salud, como mejorar la digestión, proteger el corazón y los huesos. Este alimento, originario de Mesoamérica, contiene inulina, fibra dietética y alta proporción de agua, lo que contribuye a la sensación de saciedad y hidratación del cuerpo. Además, es una excelente opción para personas con diabetes debido a su bajo contenido calórico y dulzor natural. Sin embargo, se recomienda consultar con un profesional de la salud antes de incorporarlo en la dieta, ya que cada persona tiene necesidades específicas.

Noticia 12
La menopausia puede causar sangrado de encías debido a cambios hormonales, lo que se relaciona con la gingivitis. Según la odontóloga Irene Esteve, este problema se combina con la xerostomía, o boca seca, que disminuye la producción de saliva y aumenta las infecciones bucales. Para mitigar estos síntomas, se recomienda usar humidificadores, respirar por la nariz y realizar revisiones dentales regulares. La menopausia también puede traer el "síndrome de la boca ardiente", que causa molestias en áreas como la lengua y encías. Buscar atención odontológica es crucial para manejar estos problemas y mantener una buena salud bucal durante esta etapa.

Noticia 13
El tema central de la noticia son los cambios biológicos y psicológicos comunes a partir de los 60 años. El doctor José María Pallarés destaca que las principales causas de muerte en esta edad son patologías crónicas relacionadas con el corazón, pulmones, sistema endocrino y tumores. Se recomienda mantener una dieta mediterránea y hacer chequeos médicos regulares para mitigar estos efectos.

Noticia 14
El tema central de la noticia es que ciertos alimentos pueden adquirir un sabor a refrigerador debido a los gases utilizados en estos equipos. El 'tiktoker' @Soycienciaycocina explicó que esto ocurre principalmente si los alimentos no están bien envueltos y el serpentín o bobina de enfriamiento está sucio, liberando componentes como hidrofluorocarbonos. Las consecuencias son que estos sabores desagradables pueden disuadir a las personas de consumir ciertos alimentos. El consejo es mantener la nevera limpia y guardar los alimentos herméticamente para prevenir este problema.

Noticia 15
El dermatólogo Dr. Daniel Asz Sigall desmiente el mito de que los shampoos causen caída del cabello. Según él, elegir el producto adecuado es crucial para cuidar el cuero cabelludo sin perjudicarlo. El especialista recomienda seleccionar shampoos específicos según el tipo de pelo y cuero cabelludo, y señala que la elección debe basarse en factores más allá del aroma o textura. Asimismo, destaca que cambios estacionales pueden influir en la caída del cabello, pero no es el shampoo quien causa problemas capilares significativos. La recomendación final es consultar a un dermatólogo ante cualquier preocupación sobre pérdida de cabello.

Noticia 16
La Oficina de Aduanas y Protección Fronteriza (CBP) advirtió sobre la prohibición de llevar huevos crudos y aves de corral desde México al entrar a Estados Unidos, en el marco del Día Internacional del Huevo. Las autoridades explicaron que esto se debe a riesgos de plagas y enfermedades. Aunque algunos productos con huevo envasados o cocinados pueden ingresar, los huevos crudos están estrictamente prohibidos. La CBP recordó la importancia de declarar todos los productos agrícolas al entrar al país para evitar sanciones.

Noticia 17
Una mujer en Florida afirmó que un batido de Chick-fil-A aceleró su trabajo de parto, volviéndose viral en TikTok. Anna Lundy aseguró que después de probar varios métodos naturales, bebió el batido y tuvo contracciones en menos de dos horas; su bebé nació al día siguiente. La Dra. Lauren F. Streicher desestimó la afirmación, explicando que muchos alimentos se han asociado erróneamente con la inducción del parto, y recomendó seguir las indicaciones médicas para una gestación segura.

Noticia 18
La Dra. Emma Qureshey, ginecóloga obstetra, ha advertido a través de TikTok sobre tres hábitos que podrían dañar la salud, especialmente el de orinar en la ducha. Asegura que esto puede debilitar el suelo pélvico y causar incontinencia. También recomienda evitar tratamientos caseros para infecciones vaginales, ya que pueden empeorar las condiciones. La doctora enfatiza la importancia de consultar a profesionales de la salud ante cualquier síntoma y ofrece recomendaciones básicas para prevenir infecciones urinarias.

Noticia 19
El aguacate, rico en ácido fólico y ácidos grasos omega-3, se ha destacado por sus beneficios para la salud mental según estudios del Departamento de Nutrición de la Universidad de Chile. Este alimento contribuye a la regulación del estado de ánimo y previene desequilibrios neuropsiquiátricos. Expertos recomiendan su inclusión en la dieta diaria, aunque subrayan la importancia de consultar con un profesional de la salud. Además de estos beneficios, el aguacate ofrece vitaminas y minerales que promueven la salud cardiovascular.

Noticia 20
Hipócrates recomendaba la miel como remedio natural para promover el bienestar y prolongar la vida. La Fundación Española de Nutrición destaca que contiene azúcares, aminoácidos, vitaminas, minerales y antioxidantes, con propiedades antiinflamatorias y antibacterianas. Investigaciones actuales confirman que reduce el colesterol LDL y previene enfermedades del corazón, mientras que estudios recientes muestran que ayuda a reducir la grasa en el hígado, protegiéndolo contra el estrés oxidativo.

Noticia 21
Dalton Cummins, quien sobrevivió al cáncer dos veces a los 24 años, ahora trabaja como enfermero en el Riley Hospital for Children donde fue paciente. Diagnósticado inicialmente con linfoma difuso de células B grandes y luego con linfoma de Hodgkin, Dalton superó intensivos tratamientos incluyendo quimioterapia y trasplante de células madre. Su experiencia personal lo motivó a trabajar en el mismo hospital que lo atendió, donde puede ayudar a otros pacientes oncológicos.

Noticia 22
El tema central de la noticia es un consejo dado por una dietista sobre hábitos a abandonar para lograr una pérdida de peso sostenible. Courtney Kassi, con 425.000 seguidores en TikTok, compartió cinco malos hábitos que deben ser eliminados, incluyendo evitar eventos sociales y adoptar una mentalidad negativa. Las implicaciones son importantes para quienes buscan cambiar su estilo de vida y pérdida de peso; sin un plan adecuado y la obsesión con la balanza diaria pueden llevar a resultados contraproducentes.

Noticia 23
El estudio de expertos de la Escuela de Medicina de Harvard identifica cinco formas de ejercicio para mantener una "salud de oro" a lo largo de la vida: natación, tai chi, entrenamiento de fuerza, caminatas y ejercicios de Kegel. La natación es recomendada para personas con artritis, mientras que el tai chi beneficia tanto al cuerpo como a la mente. El fortalecimiento muscular es crucial para prevenir caídas en personas mayores. Las caminatas son accesibles y ayudan a combatir enfermedades crónicas, y los ejercicios de Kegel mejoran la continencia urinaria y la salud sexual. Estas actividades promueven una mejor calidad de vida tanto física como mental.

Noticia 24
Siete Foods, una empresa fundada en 2014 por una familia mexicano-estadounidense, será adquirida por PepsiCo por US$1.200 millones para incorporar productos saludables inspirados en la cocina mexicana a su cartera. La transacción se espera cierre durante el primer semestre de 2025. Siete Foods ofrece tortillas, salsas y galletas hechas con ingredientes naturales y saludables, populares entre seguidores de dietas paleo o keto. PepsiCo destacó que los productos aportarán un aspecto nuevo a su cartera multicultural.

Noticia 25
Trabajadores portuarios en Estados Unidos iniciaron una huelga que podría afectar el comercio de alimentos y otros productos importados. Afectará principalmente plátanos, cerezas, mariscos y café, entre otros. La huelga, si persiste, podría generar escasez y subidas de precios para los consumidores en solo dos semanas. Expertos advierten que la situación podría alargarse hasta el próximo año si no se resuelve pronto, pero hay suministros de respaldo gracias a las lecciones aprendidas durante la pandemia.

Noticia 26
El artículo enfatiza la importancia de hábitos saludables para retrasar los signos del envejecimiento. Se recomiendan alimentos ricos en antioxidantes, como moras, uvas y arándanos, que protegen las células contra el estrés oxidativo. La Biblioteca Nacional de Medicina destaca estos compuestos naturales. Un licuado con estos ingredientes no solo es nutritivo, sino también refrescante, según propone el artículo, destacando sus beneficios para la salud cardiovascular y ósea, así como su efecto antiinflamatorio.

Noticia 27
Desde el inicio de 2024, las reclamaciones en servicios de salud han aumentado exponencialmente, especialmente en EPS intervenidas como Nueva EPS y Sanitas. La Supersalud reporta un incremento del 11,21% en quejas comparando agosto de este año con el mismo mes del año anterior. Las principales quejas se centran en el acceso a servicios y medicamentos, con un aumento del 49,7% en tutelas para procedimientos médicos y del 77,5% para suministro de medicamentos. El exministro Augusto Galán Sarmiento señala que la financiación estructural del sistema está deteriorada, mientras que Nueva EPS y Sanitas implementan estrategias para mejorar su red de servicios y entrega de medicamentos.

Noticia 28
El chontaduro, una fruta típica de Colombia, se destaca por sus propiedades nutricionales y beneficios para la salud. Este estudio realizado por la Universidad del Valle subraya su valor como fuente de proteínas, aceites, vitaminas liposolubles y minerales. Además, el chontaduro contiene vitamina A, C, antocianinas y betacarotenos, contribuyendo a mejorar problemas digestivos y disminuir inflamación. Sus beneficios incluyen cuidar la visión, combatir el estreñimiento, prevenir el envejecimiento prematuro y evitar la anemia.

Noticia 29
El 'youtuber' Sven Vee completó un desafío de pedalear dos horas diarias durante 30 días, recorriendo más de 2.000 kilómetros y notando mejoras en su resistencia y bienestar mental. Este ejemplo demuestra que la bicicleta fija puede ser una actividad simple pero efectiva para mejorar la salud. Expertos recomiendan un equilibrio moderado en el ejercicio para evitar posibles daños, destacando la importancia de la disciplina y la regularidad.

Noticia 30
El cerebro, compuesto por más de mil millones de neuronas, requiere cuidados como una dieta equilibrada, ejercicio y descanso adecuado para mantener su salud. La albahaca, destacada por su contenido en antioxidantes y compuestos biológicamente activos, se ha asociado con beneficios cognitivos y digestivos. Expertos recomiendan incluirla en la dieta a través de infusiones, pero aconsejan consultar con un profesional para adaptarla a las necesidades individuales.
# Activar Ollama con el modelo qwen2.5:7b o con el que sea de su eleccion
# en este caso es recomendado uno mucho mas "capaz"
from langchain_ollama import ChatOllama
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate
)

def get_topic_in_cluster(news: str, model_name: str = "qwen2.5:7b") -> str:

    llm_ollama = ChatOllama(
        model=model_name,
        temperature=0.1,
        num_predict=4096,
        num_ctx=16000,
        keep_alive=0
    )

    prompt_characterics = ChatPromptTemplate(
        [
            SystemMessagePromptTemplate.from_template(
                """Eres un asistente especializado en análisis de noticias y clustering semántico. Tu tarea es ayudar a identificar temas, """
                """palabras clave y subtemas dentro de grupos de resúmenes de noticias. Analizas los patrones comunes en los eventos, """
                """lugares, personas y palabras clave para proporcionar una descripción clara y precisa del tema principal de cada grupo """
                """de noticias. Además, eres capaz de detectar subtemas o enfoques recurrentes que puedan enriquecer el análisis."""
            ),
            HumanMessagePromptTemplate.from_template(
                """Los siguientes son resúmenes de noticias que han sido agrupados en un clúster debido a su similitud semántica. """
                """Tu tarea es analizar estos resúmenes y proporcionar una caracterización general del tema principal del clúster. """
                """Identifica patrones comunes en los eventos, lugares, personas y palabras clave mencionadas, y determina un título o """
                """categoría representativa que capture la esencia del clúster."""
                """Además, destaca si hay algún subtema relevante o recurrente que ayude a entender mejor el enfoque de las noticias en """
                """este grupo. Asegúrate de que la descripción sea clara y precisa para que refleje el contenido general de las noticias."""
                """Resúmenes de noticias en el clúster: {news}"""
                """Salida esperada:
                    Tema principal: Una breve descripción del tema general del clúster.
                    Palabras clave: Lista de palabras clave relevantes.
                    Subtemas (si los hay): Cualquier subtema adicional que aparezca en varios resúmenes.
                    Título sugerido: Un título breve que represente el clúster."""
                )
        ]
    )

    llm_chain = prompt_characterics | llm_ollama | StrOutputParser()

    return llm_chain.invoke({"news": news})
label_cluster = 1
print(f"Cluster con label: {label_cluster}\nNoticias de la muestra:\n")
news_summary = get_text_sample_by_cluster(label_cluster, 15)
print("\nRespuesta LLM:\n")
print(get_topic_in_cluster(news_summary))
Cluster con label: 1
Noticias de la muestra:

Noticia 1
David Alonso, piloto colombiano de Moto3, ganó su décimo triunfo en Japón, asegurando matemáticamente el título mundial. Su victoria emocionante incluyó celebraciones con banderas y la moto que usaba al comenzar. Alonso expresó emoción y gratitud por su equipo y familia. Este triunfo marca el primer campeonato mundial para Colombia en Moto3, con importantes implicaciones para el país y el deportista.

Noticia 2
El partido entre Bolivia y Colombia por la eliminatoria al Mundial del 2026 contará con el arbitraje central de Wilton Sampaio, un árbitro brasileño con experiencia en torneos internacionales. La designación fue realizada por la Conmebol para el encuentro en El Alto a 4.150 metros de altura. Sampaio ha dirigido partidos entre ambos países anteriormente y será apoyado por jueces brasileños, lo que podría influir en el resultado del juego.

Noticia 3
El Camp Nou, estadio del FC Barcelona, está sufriendo remodelaciones a gran velocidad para cumplir con los plazos. Un enfrentamiento entre obreros subcontratados originarios de Albania y Rumania generó una pelea multitudinaria que dejó seis heridos y retrasó momentáneamente las obras. Las autoridades despidieron a 20 trabajadores involucrados y arrestaron a varios. A pesar del incidente, la remodelación avanza con el objetivo de entregar el estadio antes de lo previsto para celebrar los 125 años del club en noviembre de 2024, aunque podría estar listo hasta enero del próximo año.

Noticia 4
Manuela Vanegas comienza la temporada con Real Sociedad destacándose en marca y goleo. La colombiana de 23 años marcó su segundo gol en cinco partidos, incluyendo un tiro libre directo crucial contra el Granada. Con 13 goles totales en Europa, Vanegas es una pieza clave para la Real Sociedad y la Selección Colombia.

Noticia 5
Deportivo Pasto enfrentará a Atlético Nacional en la fecha 13 de la Liga BetPlay 2024-2. Ambos equipos luchan por los cuadrangulares semifinales, con Nacional sexto y Pasto octavo. El líder es América de Cali, que suma 26 puntos tras vencer a Boyacá Chicó.

Noticia 6
Jürgen Klopp, exentrenador del Liverpool, fue nombrado nuevo "jefe global de fútbol" de Red Bull a partir de enero de 2025 con un contrato de cinco años. Su rol incluirá la dirección estratégica de equipos como el Leipzig y el Salzburgo. Klopp destacó su intención de desarrollar el talento futbolístico de los clubes bajo la tutela de Red Bull. El nombramiento se produce tras meses de negociaciones entre Red Bull y Klopp, lideradas por Oliver Mintzlaff, director general de proyectos deportivos de la compañía.

Noticia 7
Liverpool ha tenido una temporada sólida en las principales competiciones, con cinco victorias en seis partidos de la Premier League y una victoria en la Champions League contra el Milan. Luis Díaz, un colombiano clave bajo el mando del DT Arne Slot, se ha convertido en el máximo goleador del equipo. Alexis Mac Allister felicitó a Díaz por sus números pero también lo animó a mantener la consistencia durante todo el año. En su próximo partido, Liverpool recibirá al Bolonia en Anfield Road.

Noticia 8
Colombia jugará su partido crucial en las eliminatorias contra Bolivia en el estadio más alto del mundo, donde el ambiente es tenso y Boliva viene de ganar por primera vez como visitante desde 1993. Néstor Lorenzo, entrenador colombiano, denuncia intentos de complicar la logística y espionaje a sus entrenamientos. A pesar de las dificultades, Colombia busca mantener su invicto y asegurar matemáticamente su clasificación lo antes posible.

Noticia 9
James Rodríguez volvió a ser titular en Rayo Vallecano y mostró destellos de su habilidad en la victoria por 1-1 contra Leganés, calmando las críticas sobre su rendimiento. El entrenador Íñigo Pérez mantiene que el jugador necesita ganar ritmo tras su parón. James demostró calidad y humanidad al firmar autógrafos y hacer felices a los hinchas en el centro deportivo del club, incluyendo una familia con un recién nacido.

Noticia 10
Millonarios empató 0-0 con Bucaramanga en El Campín, arrancando mal la Copa Colombia. El partido fue plano y sin emociones, con Millonarios mostrando un juego errático. Para el segundo tiempo se hizo el cambio de Delvin Alfonzo, pero no mejoró significativamente. Ahora Millonarios debe ganar en el juego de vuelta para avanzar en el torneo.

Noticia 11
Se filtró una nueva camiseta de la Selección Colombia para conmemorar el centenario de la Federación Colombiana de Fútbol, generando controversia entre los aficionados. El diseño es similar al usado en 1945 y no ha sido lanzado oficialmente. La camiseta, que incluye el escudo y el logo antiguo de Adidas, ya se vende en 100 euros en portales internacionales. Muchos fans expresan su opinión, algunos la consideran hermosa mientras otros la critican por su precio y diseño.

Noticia 12
Se filtró una nueva camiseta de la Selección Colombia que rendirá homenaje a los 100 años de la Federación Colombiana de Fútbol. La prenda, diseñada por Adidas, es blanca con el tricolor en franjas horizontales y lleva el escudo del equipo y el logo antiguo bordados. Se espera que forme parte de una colección que incluye también una sudadera azul. El precio oficial aún no se ha anunciado, pero ya se vende por 100 euros (aproximadamente 464 mil pesos).

Noticia 13
La Selección Colombia prepara su partido contra Bolivia a 4.150 metros de altura, mientras el técnico Néstor Lorenzo enfrenta críticas por la elección del lugar para la concentración. Oscar Villegas, DT boliviano, cuestionó la estrategia colombiana y acusó a los medios locales de favorecer a Colombia. Por su parte, Luis Haquín, capitán de Bolivia, aseguró que su equipo buscará romper el invicto de Colombia en casa.

Noticia 14
Bolivia derrotó a Colombia en un partido donde el equipo altiplanino sorprendió con una jugada individual que llevó al empate tras la expulsión de un jugador colombiano. La selección dirigida por Néstor Lorenzo, jugando con un hombre menos, intentó controlar el juego pero no logró marcar. En el segundo tiempo, Bolivia anotó gracias a un zurdazo imposible de Miguel Terceros que desequilibró el partido.

Noticia 15
James Rodríguez es la gran figura del Rayo Vallecano, aunque no es titular regular. El equipo espera que su experiencia de la Copa América ayude en las demostraciones futuras. Los dirigentes están contentos con él y buscan mantener la normalidad para subir en la tabla. Algunos sectores critican al jugador, pero los dirigentes ven con optimismo su futuro en el club.


Respuesta LLM:

**Tema principal:** El fútbol colombiano y sus implicaciones, con énfasis en competiciones internacionales, campeonatos nacionales y la preparación para partidos cruciales.

**Palabras clave:** Colombia, fútbol, Copa América, Liga BetPlay 2024-25, eliminatorias al Mundial 2026, Millonarios, Real Sociedad, James Rodríguez, David Alonso, competencias internacionales, entrenadores, camisetas conmemorativas.

**Subtemas:**
1. **Campeonatos y Títulos:** Menciona el logro de David Alonso como primer campeón mundial para Colombia en Moto3.
2. **Eliminatorias al Mundial 2026:** Discute los partidos entre Bolivia y Colombia, la designación del árbitro Wilton Sampaio, y las tensiones generadas por el ambiente en El Alto.
3. **Incidentes y Conflictos:** Aborda peleas entre obreros en el Camp Nou y críticas a la elección de local para los partidos de eliminatorias.
4. **Camisetas conmemorativas:** Menciona la polémica generada por las nuevas camisetas de la Selección Colombia.

**Título sugerido:** "Fútbol Colombiano: Campeonatos, Eliminatorias y Controversias"