{"id":24559,"date":"2026-09-16T14:44:08","date_gmt":"2026-09-16T14:44:08","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/aprendizaje-automatico-tareas-cotidianas\/"},"modified":"2026-09-16T14:44:08","modified_gmt":"2026-09-16T14:44:08","slug":"aprendizaje-automatico-tareas-cotidianas","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/aprendizaje-automatico-tareas-cotidianas\/","title":{"rendered":"Aprendizaje autom\u00e1tico para tareas cotidianas"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">El aprendizaje autom\u00e1tico suele considerarse demasiado complicado para las tareas de desarrollo cotidianas. A menudo lo asociamos con conceptos como los macrodatos, la miner\u00eda de datos, la ciencia de datos y la inteligencia artificial. A veces, la sensaci\u00f3n es esta:<\/p>\n\n\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-3524\"><p class=\"h5 m-0\" id=\"toc-title-3524\">\u00cdndice<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#el-aprendizaje-automatico-es-dificil\">El aprendizaje autom\u00e1tico es dif\u00edcil<\/a><a class=\"scrollme link-body-color\" href=\"#ejemplo-de-la-vida-real\">Ejemplo de la vida real<\/a><a class=\"scrollme link-body-color\" href=\"#analisis-de-html-de-internet-publica\">An\u00e1lisis de HTML de internet p\u00fablica<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#el-analisis-de-clusteres-al-rescate\">El an\u00e1lisis de cl\u00fasteres al rescate<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">03<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#recopila-un-conjunto-de-datos\">Recopila un conjunto de datos<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">04<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#determina-el-numero-de-clusteres\">Determina el n\u00famero de cl\u00fasteres<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">05<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#agrupamiento\">Agrupamiento<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">06<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#clasificacion\">Clasificaci\u00f3n<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">07<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#validacion\">Validaci\u00f3n<\/a><a class=\"scrollme link-body-color\" href=\"#lecciones-aprendidas\">Lecciones aprendidas<\/a><a class=\"scrollme link-body-color\" href=\"#enlaces-utiles\">Enlaces \u00fatiles<\/a><\/div><\/div><\/nav>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4884\" width=\"698\" height=\"400\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/ml.jpeg\" alt=\"A brain made up of electrical points\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/ml.jpeg 698w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/ml-300x172.jpeg 300w\" sizes=\"(max-width: 698px) 100vw, 698px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">El aprendizaje autom\u00e1tico es dif\u00edcil<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Siempre he pensado que podemos beneficiarnos del aprendizaje autom\u00e1tico para las tareas sencillas que realizamos a diario.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplo de la vida real<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En Mailgun, trabajamos con emails y, como parte de nuestro servicio, analizamos las citas en HTML. Esto permite que un usuario extraiga la \u00faltima respuesta en lugar de toda la conversaci\u00f3n, que se devuelve como parte de nuestra respuesta de webhook. Puedes leer m\u00e1s sobre c\u00f3mo gestionamos el procesamiento de los mensajes entrantes en nuestra\u00a0<a href=\"https:\/\/documentation.mailgun.com\/en\/latest\/user_manual.html?#routes\" target=\"_tabs\" rel=\"noopener noreferrer\">documentaci\u00f3n<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para quienes no lo sepan, as\u00ed es como se ve el an\u00e1lisis de HTML de internet p\u00fablica:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4885\" width=\"370\" height=\"276\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/jeep.png\" alt=\"Dirty Jeep stuck in the mud\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/jeep.png 370w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/jeep-300x224.png 300w\" sizes=\"(max-width: 370px) 100vw, 370px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">An\u00e1lisis de HTML de internet p\u00fablica<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Es un caos y a veces los procesos se quedan atascados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cambiar la biblioteca de an\u00e1lisis puede ayudar, pero no resolver\u00e1 el problema por completo, ya que todas las bibliotecas tienen sus limitaciones. Tienes que restringir el an\u00e1lisis a algo razonable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">El an\u00e1lisis de cl\u00fasteres al rescate<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pero \u00bfcu\u00e1les deber\u00edan ser los criterios y el l\u00edmite? \u00bfDeber\u00edamos limitarlo por la longitud del HTML o por el recuento de etiquetas? \u00bfQuiz\u00e1s ambos? \u00bfTal vez por algo m\u00e1s? Obviamente, el objetivo es procesar la mayor cantidad de mensajes posible sin que resulte contraproducente, pero el camino a seguir no est\u00e1 muy claro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ah\u00ed es donde el an\u00e1lisis de cl\u00fasteres y la clasificaci\u00f3n estad\u00edstica resultan \u00fatiles. Para la investigaci\u00f3n utilic\u00e9\u00a0<a href=\"https:\/\/www.r-project.org\/\" target=\"_tabs\" rel=\"noopener noreferrer\">R<\/a>, pero, dependiendo de tu tarea y tus preferencias personales, puedes usar otra cosa:\u00a0<a href=\"http:\/\/scikit-learn.org\/stable\/\" target=\"_tabs\" rel=\"noopener noreferrer\">scikit-learn<\/a>,\u00a0<a href=\"http:\/\/www.cs.waikato.ac.nz\/ml\/weka\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Weka<\/a>,\u00a0<a href=\"http:\/\/moa.cms.waikato.ac.nz\/\" target=\"_tabs\" rel=\"noopener noreferrer\">MOA<\/a>, etc.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Recopila un conjunto de datos<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Primero, registramos la longitud del HTML, el recuento de etiquetas y el tiempo de procesamiento de los mensajes, y los guardamos en un archivo csv:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                HTML                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-markup\">\r\n                                <code id=\"code_0_content\" class=\"language-markup\">\r\n\r\n                                    htmllen,tagscount,took rn2893762,85527,34.300139904 rn31378,518,0.0368919372559 rn19105,413,0.0545339584351 rn...\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">La inmensa mayor\u00eda de los mensajes tardan fracciones de segundo en procesarse. Por tanto, al recopilar el conjunto de datos, tuvimos que asegurarnos de tener suficientes mensajes \u201clentos\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Terminamos con dos archivos csv, recopilados en d\u00edas distintos. Uno ten\u00eda 13\u00a0831 l\u00edneas y se reserv\u00f3 para el an\u00e1lisis y el entrenamiento del modelo (<b>el conjunto de datos de entrenamiento<\/b>). El otro ten\u00eda 12\u00a0149 l\u00edneas y se reserv\u00f3 para la validaci\u00f3n del modelo (<b>el conjunto de datos de validaci\u00f3n<\/b>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por lo general, conviene tener al menos dos conjuntos de datos: uno para el entrenamiento y otro para la validaci\u00f3n. De lo contrario, podr\u00edas encontrarte con el problema del\u00a0<b>sobreajuste<\/b>\u00a0(overfitting), en el que tu modelo se ajusta bien a los datos de entrenamiento pero fracasa en el mundo real.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Determina el n\u00famero de cl\u00fasteres<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para visualizar los datos y buscar patrones,\u00a0<a href=\"http:\/\/www.statmethods.net\/advstats\/cluster.html\" target=\"_tabs\" rel=\"noopener noreferrer\">el agrupamiento k-means<\/a>\u00a0fue lo primero que probamos:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    messages &lt;- read.csv(file=&quot;messages080816.csv&quot;, sep=&quot;,&quot;, head=TRUE) rn    mydata &lt;- matrix(messages$took, ncol=1) rnrn    ## Determine the number of clusters rn    wss &lt;- (nrow(mydata)-1)*sum(apply(mydata,2,var)) rn    for (i in 2:15) wss[i] &lt;- sum(kmeans(mydata, rn        centers=i)$withinss) rn    plot(1:15, wss, type=&quot;b&quot;, xlab=&quot;Number of Clusters&quot;, rn        ylab=&quot;Within groups sum of squares&quot;)\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Como puedes ver, hay una mejora de rendimiento significativa hasta los cuatro cl\u00fasteres. A partir de ah\u00ed, no hay una mejora real.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Agrupamiento<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El siguiente paso era averiguar c\u00f3mo se distribuyen los puntos de datos entre los cl\u00fasteres:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                     ## K-Means Clustering with 4 clustersrn    fit &lt;- kmeans(mydata, 4) rnrn    ## Cluster Plot against 1st 2 principal components rn    ## vary parameters for most readable graph rn    library(cluster) rn        clusplot(mydata, fit$cluster, color=TRUE,rn           shade=TRUE, labels=2, lines=0)\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4886\" width=\"663\" height=\"652\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/clusplot.png\" alt=\"A clusplot graph\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/clusplot.png 663w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/clusplot-300x295.png 300w\" sizes=\"(max-width: 663px) 100vw, 663px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Y hasta cierto punto ya puedes anticipar el problema: los cl\u00fasteres se forman separando los puntos de datos m\u00e1s lejanos, mientras que el intervalo que nos interesa (1-20 s) est\u00e1 justo en el medio. El problema persiste al aumentar el n\u00famero de cl\u00fasteres.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Adem\u00e1s, existe una superposici\u00f3n importante entre los cl\u00fasteres en el intervalo:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                     ## get clusters mean, min, max rn    mean &lt;- aggregate(mydata,by=list(fit$cluster),FUN=mean) rn    min &lt;- aggregate(mydata,by=list(fit$cluster),FUN=min) rn    max &lt;- aggregate(mydata,by=list(fit$cluster),FUN=max)\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4887\" width=\"251\" height=\"321\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/clusters.png\" alt=\"A list of clusters code\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/clusters.png 251w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/clusters-235x300.png 235w\" sizes=\"(max-width: 251px) 100vw, 251px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Compara los cl\u00fasteres 1 y 4. El problema persiste al aumentar el n\u00famero de cl\u00fasteres.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En este punto, decidimos probar un enfoque distinto y analizar los percentiles del tiempo de procesamiento de los mensajes:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                     percentiles &lt;- quantile(messages$took, seq(0.5, 0.99, 0.01)) rn    plot(seq(0.5, 0.99, 0.01), percentile)\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4888\" width=\"639\" height=\"621\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/tookpercentiles.png\" alt=\"A graph of percentiles\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/tookpercentiles.png 639w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/tookpercentiles-300x292.png 300w\" sizes=\"(max-width: 639px) 100vw, 639px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Como puedes ver, a partir del percentil 78 el tiempo de procesamiento se dispara r\u00e1pidamente. Aqu\u00ed ten\u00edamos nuestro primer l\u00edmite: el percentil 78, que correspond\u00eda a 6,5 segundos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Todos los puntos de datos que tardaban menos de 6,5 s se marcaron como \u201cr\u00e1pidos\u201d y los dem\u00e1s como \u201clentos\u201d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Clasificaci\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para la clasificaci\u00f3n, probamos\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Support_vector_machine\" target=\"_tabs\" rel=\"noopener noreferrer\">SVM<\/a>\u00a0(m\u00e1quinas de vectores de soporte),\u00a0<a href=\"http:\/\/www.statmethods.net\/advstats\/cart.html\" target=\"_tabs\" rel=\"noopener noreferrer\">Random Forests<\/a>\u00a0y\u00a0<a href=\"http:\/\/www.statmethods.net\/advstats\/cart.html\" target=\"_tabs\" rel=\"noopener noreferrer\">CART<\/a>(\u00e1rboles de clasificaci\u00f3n y regresi\u00f3n).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CART mostr\u00f3 resultados ligeramente mejores para esta tarea, pero su principal ventaja es que ofrece un \u00e1rbol de decisi\u00f3n f\u00e1cil de entender, explicar e implementar frente a las SVM o los Random Forests, que funcionan como una caja negra y requieren el uso de bibliotecas pesadas de aprendizaje autom\u00e1tico en producci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As\u00ed es como se clasifica usando CART:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    x &lt;- subset(messages, select=-took) rnlibrary(rpart) rnrn# grow tree rnfit &lt;- rpart(x$cls ~., method=&quot;class&quot;, data=x) rnrn## display the results rnprintcp(fit)rnrn# detailed summary of splits rnsummary(fit) rnrn# plot tree rnplot(fit, uniform=TRUE, rn    main=&quot;Classification Tree for message processing time&quot;) rntext(fit, use.n=TRUE, all=TRUE, cex=.8) \r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Este es el \u00e1rbol de decisi\u00f3n:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4889\" width=\"617\" height=\"590\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/tree.png\" alt=\"Classification tree for message processing time\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/tree.png 617w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/tree-300x287.png 300w\" sizes=\"(max-width: 617px) 100vw, 617px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Y este es el aspecto de la implementaci\u00f3n:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    def html_too_big(s): rn    return s.count(&#039;&lt;&#039;) &gt; _MAX_TAGS_COUNT\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfNo es una maravilla? \u00a1Toda la complejidad de la investigaci\u00f3n en una sola l\u00ednea!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Validaci\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para la evaluaci\u00f3n tomamos el conjunto de datos de validaci\u00f3n e intentamos predecir la clasificaci\u00f3n usando nuestro modelo:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                     validate &lt;- read.csv(file=&quot;messages080916.csv&quot;, sep=&quot;,&quot;, head=TRUE) rn    validate &lt;- subset(validate, select=-took) rn    xv &lt;- subset(validate, select=-cls) rn    y &lt;- predict(fit, xv, type=&quot;class&quot;) rn    table(validate$cls, y)\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Esta es la matriz de confusi\u00f3n y algunas\u00a0<a href=\"http:\/\/blog.revolutionanalytics.com\/2016\/03\/com_class_eval_metrics_r.html\" target=\"_tabs\" rel=\"noopener noreferrer\">m\u00e9tricas de clasificaci\u00f3n comunes<\/a>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4890\" width=\"617\" height=\"501\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/evaluate.png\" alt=\"Evaluation code\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/evaluate.png 617w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/evaluate-300x244.png 300w\" sizes=\"(max-width: 617px) 100vw, 617px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Lecciones aprendidas<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El aprendizaje autom\u00e1tico no es solo para los cient\u00edficos de datos. Incluso las decisiones sencillas impulsadas por el aprendizaje autom\u00e1tico pueden beneficiarte. Conoce tus datos. No conf\u00edes ciegamente en los algoritmos ni en los modelos cient\u00edficos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Enlaces \u00fatiles<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gran explicaci\u00f3n de un <a href=\"http:\/\/stats.stackexchange.com\/questions\/19048\/what-is-the-difference-between-test-set-and-validation-set\" target=\"_tabs\" rel=\"noopener noreferrer\">entrenamiento-validaci\u00f3n-prueba<\/a> como flujo de trabajo<\/li>\n\n\n\n<li>Gu\u00eda r\u00e1pida sobre <a href=\"http:\/\/www.statmethods.net\/advstats\/cart.html\" target=\"_tabs\" rel=\"noopener noreferrer\">CART<\/a> y <a href=\"http:\/\/www.statmethods.net\/advstats\/cart.html\" target=\"_tabs\" rel=\"noopener noreferrer\">Random Forests<\/a> en R<\/li>\n\n\n\n<li>Gu\u00eda r\u00e1pida sobre <a href=\"http:\/\/www.statmethods.net\/advstats\/cluster.html\" target=\"_tabs\" rel=\"noopener noreferrer\">el an\u00e1lisis de cl\u00fasteres<\/a> en R<\/li>\n\n\n\n<li>C\u00f3mo <a href=\"http:\/\/www.cyclismo.org\/tutorial\/R\/plotting.html\" target=\"_tabs\" rel=\"noopener noreferrer\">trazar gr\u00e1ficos<\/a> en R<\/li>\n\n\n\n<li>El concepto de\u00a0<a href=\"http:\/\/www.cyclismo.org\/tutorial\/R\/plotting.html\" target=\"_tabs\" rel=\"noopener noreferrer\">m\u00e9tricas de clasificaci\u00f3n comunes<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Precision_and_recall\" target=\"_tabs\" rel=\"noopener noreferrer\">precisi\u00f3n<\/a> y <a href=\"https:\/\/en.wikipedia.org\/wiki\/Precision_and_recall\" target=\"_tabs\" rel=\"noopener noreferrer\">Recall<\/a> explicado<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Feliz aprendizaje autom\u00e1tico y miner\u00eda de datos!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El aprendizaje autom\u00e1tico suele considerarse demasiado complicado para las tareas de desarrollo cotidianas. A menudo lo asociamos con conceptos como los macrodatos, la miner\u00eda de datos, la ciencia de datos y la inteligencia artificial. A veces, la sensaci\u00f3n es esta:<\/p>\n","protected":false},"author":47,"featured_media":4843,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[23],"class_list":["post-24559","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-it-and-engineering"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Aprendizaje autom\u00e1tico para tareas cotidianas - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"El aprendizaje autom\u00e1tico suele considerarse demasiado complicado para las tareas de desarrollo cotidianas. Sin embargo, creemos que todo el mundo puede beneficiarse del aprendizaje autom\u00e1tico incluso en tareas sencillas. M\u00e1s informaci\u00f3n -\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/aprendizaje-automatico-tareas-cotidianas\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Aprendizaje autom\u00e1tico para tareas cotidianas - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"El aprendizaje autom\u00e1tico suele considerarse demasiado complicado para las tareas de desarrollo cotidianas. Sin embargo, creemos que todo el mundo puede beneficiarse del aprendizaje autom\u00e1tico incluso en tareas sencillas. M\u00e1s informaci\u00f3n -\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/aprendizaje-automatico-tareas-cotidianas\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png\" \/>\n\t<meta property=\"og:image:width\" content=\"720\" \/>\n\t<meta property=\"og:image:height\" content=\"448\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/aprendizaje-automatico-tareas-cotidianas\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/aprendizaje-automatico-tareas-cotidianas\\\/\",\"name\":\"Aprendizaje autom\u00e1tico para tareas cotidianas - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/aprendizaje-automatico-tareas-cotidianas\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/aprendizaje-automatico-tareas-cotidianas\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"datePublished\":\"2026-09-16T14:44:08+00:00\",\"description\":\"El aprendizaje autom\u00e1tico suele considerarse demasiado complicado para las tareas de desarrollo cotidianas. Sin embargo, creemos que todo el mundo puede beneficiarse del aprendizaje autom\u00e1tico incluso en tareas sencillas. M\u00e1s informaci\u00f3n -\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/aprendizaje-automatico-tareas-cotidianas\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/aprendizaje-automatico-tareas-cotidianas\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/aprendizaje-automatico-tareas-cotidianas\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/aprendizaje-automatico-tareas-cotidianas\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Aprendizaje autom\u00e1tico para tareas cotidianas\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Potentes API de email transaccional que te permiten enviar, recibir y hacer seguimiento de emails, creadas pensando en los desarrolladores. \u00a1Descubre m\u00e1s!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Aprendizaje autom\u00e1tico para tareas cotidianas - Transactional Email API Service For Developers | Mailgun","description":"El aprendizaje autom\u00e1tico suele considerarse demasiado complicado para las tareas de desarrollo cotidianas. Sin embargo, creemos que todo el mundo puede beneficiarse del aprendizaje autom\u00e1tico incluso en tareas sencillas. M\u00e1s informaci\u00f3n -","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/aprendizaje-automatico-tareas-cotidianas\/","og_locale":"es_ES","og_type":"article","og_title":"Aprendizaje autom\u00e1tico para tareas cotidianas - Transactional Email API Service For Developers | Mailgun","og_description":"El aprendizaje autom\u00e1tico suele considerarse demasiado complicado para las tareas de desarrollo cotidianas. Sin embargo, creemos que todo el mundo puede beneficiarse del aprendizaje autom\u00e1tico incluso en tareas sencillas. M\u00e1s informaci\u00f3n -","og_url":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/aprendizaje-automatico-tareas-cotidianas\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/aprendizaje-automatico-tareas-cotidianas\/","url":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/aprendizaje-automatico-tareas-cotidianas\/","name":"Aprendizaje autom\u00e1tico para tareas cotidianas - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/aprendizaje-automatico-tareas-cotidianas\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/aprendizaje-automatico-tareas-cotidianas\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","datePublished":"2026-09-16T14:44:08+00:00","description":"El aprendizaje autom\u00e1tico suele considerarse demasiado complicado para las tareas de desarrollo cotidianas. Sin embargo, creemos que todo el mundo puede beneficiarse del aprendizaje autom\u00e1tico incluso en tareas sencillas. M\u00e1s informaci\u00f3n -","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/aprendizaje-automatico-tareas-cotidianas\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/aprendizaje-automatico-tareas-cotidianas\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/aprendizaje-automatico-tareas-cotidianas\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/aprendizaje-automatico-tareas-cotidianas\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/es\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/es\/blog\/"},{"@type":"ListItem","position":3,"name":"Aprendizaje autom\u00e1tico para tareas cotidianas"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/es\/#website","url":"https:\/\/www.mailgun.com\/es\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Potentes API de email transaccional que te permiten enviar, recibir y hacer seguimiento de emails, creadas pensando en los desarrolladores. \u00a1Descubre m\u00e1s!","publisher":{"@id":"https:\/\/www.mailgun.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/es\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/es\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/24559","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/users\/47"}],"version-history":[{"count":0,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/24559\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media\/4843"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media?parent=24559"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog_category?post=24559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}