{"id":3414,"date":"2026-02-22T18:44:31","date_gmt":"2026-02-22T17:44:31","guid":{"rendered":"https:\/\/www.gironi.it\/blog\/?p=3414"},"modified":"2026-02-26T09:15:12","modified_gmt":"2026-02-26T08:15:12","slug":"anomaly-detection","status":"publish","type":"post","link":"https:\/\/www.gironi.it\/blog\/anomaly-detection\/","title":{"rendered":"Anomaly detection: come identificare valori anomali nei dati"},"content":{"rendered":"<p>Abbiamo avuto modo di esaminare, nel corso di questo percorso, strumenti per descrivere i dati, per testare ipotesi, per costruire modelli. Ma c&#8217;\u00e8 una domanda che precede tutte le altre, e che troppo spesso viene ignorata: <strong>questi dati sono affidabili?<\/strong><\/p>\n<p>In qualsiasi dataset \u2014 sessioni giornaliere, click organici, tassi di conversione \u2014 possono nascondersi valori che non si comportano come gli altri. Valori che si discostano in modo anomalo dal resto della distribuzione. In statistica li chiamiamo <strong>outlier<\/strong>, o <strong>valori anomali<\/strong>.<\/p>\n<p>Un punto va chiarito subito: un valore anomalo non \u00e8 necessariamente un errore. Pu\u00f2 essere un errore di misurazione, certo (un tag di tracciamento rotto, un bot che gonfia le sessioni). Ma pu\u00f2 anche essere il segnale pi\u00f9 importante dell&#8217;intero dataset: un aggiornamento dell&#8217;algoritmo di Google, un contenuto che diventa virale, un problema tecnico che abbatte il traffico. <strong>La questione non \u00e8 eliminare le anomalie, ma riconoscerle<\/strong> \u2014 e poi decidere cosa farne.<\/p>\n<p>In questo articolo esaminiamo tre metodi statistici per identificare i valori anomali, dal pi\u00f9 intuitivo al pi\u00f9 formale. Per ciascuno vedremo la logica, i limiti e l&#8217;applicazione pratica con R.<\/p>\n<p><!--more--><\/p>\n<div style=\"border: 1px solid #ccc;padding: 1.2em 1.5em;margin: 1.5em 0;border-radius: 6px\">\n<h3 style=\"margin-top: 0\">Di cosa parleremo<\/h3>\n<ul>\n<li><a href=\"#dataset-di-lavoro\">Il dataset di lavoro: sessioni simulate con anomalie iniettate<\/a><\/li>\n<li><a href=\"#metodo-1-z-score\">Metodo 1: lo z-score<\/a><\/li>\n<li><a href=\"#metodo-2-iqr-tukey\">Metodo 2: IQR e il metodo di Tukey<\/a><\/li>\n<li><a href=\"#metodo-3-grubbs\">Metodo 3: il test di Grubbs<\/a><\/li>\n<li><a href=\"#confronto-tre-metodi\">Confronto tra i tre metodi<\/a><\/li>\n<li><a href=\"#prova-tu\">Prova tu<\/a><\/li>\n<li><a href=\"#per-approfondire\">Per approfondire<\/a><\/li>\n<\/ul>\n<\/div>\n<hr \/>\n<h2 id=\"dataset-di-lavoro\">Il dataset di lavoro<\/h2>\n<p>Per rendere le cose concrete, costruiamo un dataset simulato ma realistico: le sessioni giornaliere di un sito web nell&#8217;arco di un anno. I dati seguono approssimativamente una distribuzione normale con media 250 e deviazione standard 50, ma con cinque anomalie inserite intenzionalmente \u2014 tre cali drastici e due picchi.<\/p>\n<p>Generiamo i dati in R:<\/p>\n<pre><code class=\"language-r\">set.seed(42)\nn &lt;- 365\nsessioni &lt;- round(rnorm(n, mean = 250, sd = 50))\nsessioni[sessioni &lt; 0] &lt;- 0\n\n# Inietto 5 anomalie realistiche\nsessioni[45]  &lt;- 38   # giorno 45: problema tecnico\nsessioni[120] &lt;- 580  # giorno 120: articolo virale\nsessioni[200] &lt;- 22   # giorno 200: update Google\nsessioni[300] &lt;- 510  # giorno 300: menzione su social\nsessioni[350] &lt;- 15   # giorno 350: server down<\/code><\/pre>\n<p>Visualizziamo l&#8217;andamento con un semplice grafico temporale:<\/p>\n<pre><code class=\"language-r\">plot(1:n, sessioni, type = \"l\", col = \"steelblue\",\n     xlab = \"Giorno\", ylab = \"Sessioni\",\n     main = \"Sessioni giornaliere - un anno di traffico\")\nabline(h = mean(sessioni), col = \"red\", lty = 2)<\/code><\/pre>\n<p>A occhio, qualche picco e qualche calo si nota. Ma dove tracciamo il confine tra variazione naturale e anomalia? Servono criteri oggettivi.<\/p>\n<h2 id=\"metodo-1-z-score\">Metodo 1: lo z-score<\/h2>\n<p>Abbiamo incontrato lo z-score <a href=\"https:\/\/www.gironi.it\/blog\/la-distribuzione-normale\/\">parlando della distribuzione normale<\/a>. Lo z-score ci dice quante deviazioni standard un valore dista dalla media:<\/p>\n\\(<br \/>\nz = \\frac{x &#8211; \\mu}{\\sigma} \\\\<br \/>\n\\)\n<p>dove \\(x\\) \u00e8 il valore osservato, \\(\\mu\\) \u00e8 la media e \\(\\sigma\\) la deviazione standard. Un valore con z-score pari a 2 si trova a due deviazioni standard dalla media; uno con z-score pari a -3 si trova a tre deviazioni standard sotto la media.<\/p>\n<p>Ricordiamo la <strong>regola empirica<\/strong>: in una distribuzione normale, circa il 99.7% dei dati cade entro tre deviazioni standard dalla media. Un valore con |z| &gt; 3 \u00e8 dunque estremamente raro \u2014 meno dello 0.3% di probabilit\u00e0 sotto ipotesi di normalit\u00e0.<\/p>\n<p>Calcoliamo gli z-score per il nostro dataset e identifichiamo le anomalie:<\/p>\n<pre><code class=\"language-r\">z &lt;- (sessioni - mean(sessioni)) \/ sd(sessioni)\n\n# Soglia conservativa: |z| &gt; 3\nanomalie_z3 &lt;- which(abs(z) &gt; 3)\ncat(\"Giorni anomali (|z| &gt; 3):\", anomalie_z3, \"\\n\")\ncat(\"Sessioni:\", sessioni[anomalie_z3], \"\\n\")\ncat(\"Z-score:\", round(z[anomalie_z3], 2), \"\\n\")<\/code><\/pre>\n<p>Il risultato:<\/p>\n<pre><code>Giorni anomali (|z| &gt; 3): 45 120 200 300 350\nSessioni: 38 580 22 510 15\nZ-score: -3.75 5.92 -4.03 4.67 -4.16<\/code><\/pre>\n<p>Con la soglia |z| &gt; 3, lo z-score identifica esattamente le cinque anomalie che avevamo inserito. Nessun falso positivo, nessun falso negativo \u2014 un risultato quasi perfetto.<\/p>\n<p>Ma attenzione: se abbassiamo la soglia a |z| &gt; 2, le anomalie salgono a 14. Molti di quei valori sono semplicemente dati nella coda della distribuzione, non anomalie reali. <strong>La scelta della soglia non \u00e8 un dettaglio tecnico: \u00e8 una decisione analitica<\/strong> che dipende da quanto siamo disposti a tollerare falsi allarmi.<\/p>\n<p>C&#8217;\u00e8 un limite importante in questo metodo. Lo z-score assume che i dati seguano (almeno approssimativamente) una <strong>distribuzione normale<\/strong>. Se la distribuzione \u00e8 fortemente asimmetrica \u2014 e i dati di traffico web spesso lo sono, con lunghe code a destra \u2014 la media e la deviazione standard possono essere distorte proprio dagli outlier che stiamo cercando di individuare. \u00c8 un circolo vizioso: le anomalie influenzano le statistiche che usiamo per trovarle.<\/p>\n<h2 id=\"metodo-2-iqr-tukey\">Metodo 2: IQR e il metodo di Tukey<\/h2>\n<p>Le <a href=\"https:\/\/www.gironi.it\/blog\/statistica-descrittiva-misure-di-posizione\/\">misure di posizione<\/a> \u2014 quartili e mediana \u2014 ci offrono un approccio che non richiede ipotesi sulla forma della distribuzione. Il metodo di Tukey, dal nome del grande statistico John Tukey, usa l&#8217;<strong>intervallo interquartile<\/strong> (IQR) come metro di misura.<\/p>\n<p>L&#8217;IQR, come abbiamo visto parlando delle <a href=\"https:\/\/www.gironi.it\/blog\/misure-di-variabilita-o-dispersione\/\">misure di variabilit\u00e0<\/a>, \u00e8 la differenza tra il terzo quartile (\\(Q_3\\), il 75-esimo percentile) e il primo quartile (\\(Q_1\\), il 25-esimo percentile). Rappresenta la dispersione del 50% centrale dei dati \u2014 la parte &#8220;solida&#8221; della distribuzione, immune alle code.<\/p>\n<p>La regola di Tukey \u00e8 semplice: un valore \u00e8 considerato anomalo se cade al di fuori dei cosiddetti <strong>cardini<\/strong> (in inglese <em>fences<\/em>):<\/p>\n\\(<br \/>\n\\text{anomalia se } x &lt; Q_1 &#8211; 1.5 \\cdot IQR \\quad \\text{oppure} \\quad x &gt; Q_3 + 1.5 \\cdot IQR \\\\<br \/>\n\\)\n<p>Perch\u00e9 1.5? Tukey non scelse questo valore a caso. Per una distribuzione normale, i cardini a 1.5 IQR corrispondono approssimativamente a 2.7 deviazioni standard dalla media \u2014 una soglia ragionevolmente conservativa che cattura circa lo 0.7% delle osservazioni nelle code. Abbastanza severa da non segnalare troppi falsi positivi, abbastanza sensibile da non lasciarsi sfuggire le anomalie importanti.<\/p>\n<p>Applichiamo il metodo al nostro dataset:<\/p>\n<pre><code class=\"language-r\">Q1 &lt;- quantile(sessioni, 0.25)\nQ3 &lt;- quantile(sessioni, 0.75)\nIQR_val &lt;- Q3 - Q1\n\nlimite_inf &lt;- Q1 - 1.5 * IQR_val\nlimite_sup &lt;- Q3 + 1.5 * IQR_val\n\ncat(\"Q1:\", Q1, \" Q3:\", Q3, \" IQR:\", IQR_val, \"\\n\")\ncat(\"Limite inferiore:\", limite_inf, \"\\n\")\ncat(\"Limite superiore:\", limite_sup, \"\\n\")\n\nanomalie_iqr &lt;- which(sessioni &lt; limite_inf | sessioni &gt; limite_sup)\ncat(\"Giorni anomali:\", anomalie_iqr, \"\\n\")\ncat(\"Sessioni:\", sessioni[anomalie_iqr], \"\\n\")<\/code><\/pre>\n<p>Il risultato:<\/p>\n<pre><code>Q1: 215  Q3: 282  IQR: 67\nLimite inferiore: 114.5\nLimite superiore: 382.5\nGiorni anomali: 45 59 118 120 200 300 350\nSessioni: 38 100 385 580 22 510 15<\/code><\/pre>\n<p>Il metodo di Tukey trova 7 anomalie: le nostre 5 iniettate pi\u00f9 due valori al confine (il giorno 59 con 100 sessioni e il giorno 118 con 385). Sono davvero anomali? 100 sessioni \u00e8 effettivamente un valore basso per un sito con media 250, e 385 \u00e8 alto rispetto ai quartili. La decisione, ancora una volta, spetta all&#8217;analista.<\/p>\n<p>R offre un modo elegante per visualizzare le anomalie con il metodo di Tukey \u2014 il boxplot:<\/p>\n<pre><code class=\"language-r\">boxplot(sessioni, main = \"Sessioni giornaliere\",\n        ylab = \"Sessioni\", col = \"lightblue\", outline = TRUE)\n# I punti oltre i baffi sono le anomalie secondo Tukey<\/code><\/pre>\n<p>Il <strong>grande vantaggio<\/strong> di questo metodo rispetto allo z-score \u00e8 la robustezza: mediana e quartili non vengono influenzati dagli outlier. Non abbiamo bisogno di assumere che i dati siano normali. Il metodo di Tukey funziona anche con distribuzioni asimmetriche \u2014 e per chi lavora con dati web, questa non \u00e8 una caratteristica da poco.<\/p>\n<p>Il <strong>limite<\/strong>: il metodo non distingue tra anomalie &#8220;grandi&#8221; e &#8220;enormi&#8221;. Un valore appena fuori dal cardine e uno completamente fuori scala ricevono lo stesso trattamento \u2014 sono entrambi &#8220;anomali&#8221;, punto.<\/p>\n<h2 id=\"metodo-3-grubbs\">Metodo 3: il test di Grubbs<\/h2>\n<p>I primi due metodi si basano su regole empiriche: soglie sullo z-score, soglie sull&#8217;IQR. Ma se vogliamo un approccio formale \u2014 con un <a href=\"https:\/\/www.gironi.it\/blog\/il-test-delle-ipotesi\/\">test di ipotesi<\/a> vero e proprio \u2014 possiamo ricorrere al <strong>test di Grubbs<\/strong>.<\/p>\n<p>L&#8217;idea \u00e8 questa: prendiamo il valore pi\u00f9 estremo del dataset (quello pi\u00f9 lontano dalla media) e ci chiediamo se \u00e8 compatibile con il resto dei dati, oppure se \u00e8 &#8220;troppo&#8221; estremo per essere frutto del caso.<\/p>\n<p>Le ipotesi sono:<\/p>\n<ul>\n<li>\\(H_0\\): non ci sono outlier nel dataset<\/li>\n<li>\\(H_1\\): il valore pi\u00f9 estremo \u00e8 un outlier<\/li>\n<\/ul>\n<p>La statistica del test \u00e8:<\/p>\n\\(<br \/>\nG = \\frac{\\max |x_i &#8211; \\bar{x}|}{s} \\\\<br \/>\n\\)\n<p>dove \\(\\bar{x}\\) \u00e8 la media e \\(s\\) la deviazione standard. In altri termini, \\(G\\) \u00e8 il massimo z-score in valore assoluto. Il valore critico si ricava dalla <a href=\"https:\/\/www.gironi.it\/blog\/la-distribuzione-t-e-il-test-delle-ipotesi\/\">distribuzione t di Student<\/a> con \\(n-2\\) gradi di libert\u00e0.<\/p>\n<p>Applichiamo il test in R usando il pacchetto <code>outliers<\/code>:<\/p>\n<pre><code class=\"language-r\">library(outliers)\n\nrisultato &lt;- grubbs.test(sessioni)\nprint(risultato)<\/code><\/pre>\n<p>Il risultato:<\/p>\n<pre><code>Grubbs test for one outlier\ndata:  sessioni\nG = 5.9228, U = 0.9037, p-value = 2.339e-07\nalternative hypothesis: highest value 580 is an outlier<\/code><\/pre>\n<p>Il test identifica 580 (il picco del giorno 120, il nostro &#8220;articolo virale&#8221;) come outlier, con un p-value praticamente nullo. L&#8217;evidenza \u00e8 schiacciante: quel valore non \u00e8 compatibile con il resto della distribuzione.<\/p>\n<p>Ma va tenuto bene a mente un <strong>limite fondamentale<\/strong> del test di Grubbs: <strong>testa un solo outlier alla volta<\/strong> \u2014 il pi\u00f9 estremo. Se sospettiamo la presenza di anomalie multiple (come nel nostro caso), dobbiamo applicare il test in modo iterativo: rimuovere l&#8217;outlier identificato, ricalcolare, testare di nuovo.<\/p>\n<p>Facciamolo:<\/p>\n<pre><code class=\"language-r\">dati &lt;- sessioni\noutlier_trovati &lt;- c()\n\nfor(i in 1:5) {\n  g &lt;- grubbs.test(dati)\n  if(g$p.value &lt; 0.05) {\n    # Estraggo il valore outlier dal risultato\n    outlier_val &lt;- as.numeric(gsub(\"[^0-9.]\", \"\",\n                     regmatches(g$alternative,\n                     regexpr(\"[0-9.]+\", g$alternative))))\n    outlier_trovati &lt;- c(outlier_trovati, outlier_val)\n    dati &lt;- dati[dati != outlier_val]\n    cat(\"Iterazione\", i, \"- Outlier:\", outlier_val,\n        \"- p-value:\", format(g$p.value, digits = 3), \"\\n\")\n  } else {\n    cat(\"Iterazione\", i, \"- Nessun outlier (p =\",\n        round(g$p.value, 3), \")\\n\")\n    break\n  }\n}<\/code><\/pre>\n<p>Questo approccio iterativo \u00e8 efficace, ma <strong>insidioso<\/strong>: ogni volta che rimuoviamo un valore, cambiamo la distribuzione. La media e la deviazione standard si spostano, e ci\u00f2 che prima non era anomalo potrebbe diventarlo. \u00c8 un procedimento da usare con cautela e consapevolezza.<\/p>\n<h2 id=\"confronto-tre-metodi\">Confronto tra i tre metodi<\/h2>\n<p>Abbiamo applicato tre metodi allo stesso dataset. Vediamo cosa ha trovato ciascuno:<\/p>\n<table>\n<thead>\n<tr>\n<th>Giorno<\/th>\n<th>Sessioni<\/th>\n<th>Evento simulato<\/th>\n<th>Z-score (|z|&gt;3)<\/th>\n<th>IQR\/Tukey<\/th>\n<th>Grubbs<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>45<\/td>\n<td>38<\/td>\n<td>Problema tecnico<\/td>\n<td>Si<\/td>\n<td>Si<\/td>\n<td>Si (iter.)<\/td>\n<\/tr>\n<tr>\n<td>120<\/td>\n<td>580<\/td>\n<td>Articolo virale<\/td>\n<td>Si<\/td>\n<td>Si<\/td>\n<td>Si (1a iter.)<\/td>\n<\/tr>\n<tr>\n<td>200<\/td>\n<td>22<\/td>\n<td>Update Google<\/td>\n<td>Si<\/td>\n<td>Si<\/td>\n<td>Si (iter.)<\/td>\n<\/tr>\n<tr>\n<td>300<\/td>\n<td>510<\/td>\n<td>Menzione social<\/td>\n<td>Si<\/td>\n<td>Si<\/td>\n<td>Si (iter.)<\/td>\n<\/tr>\n<tr>\n<td>350<\/td>\n<td>15<\/td>\n<td>Server down<\/td>\n<td>Si<\/td>\n<td>Si<\/td>\n<td>Si (iter.)<\/td>\n<\/tr>\n<tr>\n<td>59<\/td>\n<td>100<\/td>\n<td>(nessuno)<\/td>\n<td>No<\/td>\n<td>Si<\/td>\n<td>No<\/td>\n<\/tr>\n<tr>\n<td>118<\/td>\n<td>385<\/td>\n<td>(nessuno)<\/td>\n<td>No<\/td>\n<td>Si<\/td>\n<td>No<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Le cinque anomalie iniettate vengono trovate da tutti e tre i metodi. Il metodo di Tukey \u00e8 il pi\u00f9 sensibile: segnala anche due valori al confine che gli altri metodi lasciano passare. Lo z-score con soglia 3 \u00e8 preciso ma dipende dall&#8217;ipotesi di normalit\u00e0. Grubbs \u00e8 il pi\u00f9 formale ma richiede l&#8217;approccio iterativo per anomalie multiple.<\/p>\n<p>La lezione importante \u00e8: <strong>non esiste il metodo giusto in assoluto<\/strong>. Esiste il metodo giusto per quei dati e per quella domanda. Nella pratica quotidiana, un approccio sensato \u00e8 applicare pi\u00f9 di un metodo e concentrarsi sui valori che vengono segnalati in modo concorde.<\/p>\n<p>Riassumiamo in R i tre metodi a confronto:<\/p>\n<pre><code class=\"language-r\"># Creo un riepilogo per ogni giorno\nriepilogo &lt;- data.frame(\n  giorno = 1:n,\n  sessioni = sessioni,\n  z_score = round(z, 2),\n  anomalia_z = abs(z) &gt; 3,\n  anomalia_iqr = sessioni &lt; limite_inf | sessioni &gt; limite_sup\n)\n\n# Mostro solo le righe anomale per almeno un metodo\nanomale &lt;- riepilogo[riepilogo$anomalia_z | riepilogo$anomalia_iqr, ]\nprint(anomale)<\/code><\/pre>\n<h2 id=\"prova-tu\">Prova tu<\/h2>\n<p>Un e-commerce ha monitorato il CTR delle proprie pagine prodotto per 30 giorni. Ecco i dati:<\/p>\n<pre><code class=\"language-r\">ctr &lt;- c(3.2, 2.8, 3.1, 2.9, 3.0, 3.3, 2.7, 3.1, 2.8, 3.0,\n         0.4, 3.2, 2.9, 3.1, 2.8, 3.0, 2.9, 7.8, 3.1, 2.7,\n         3.0, 3.2, 2.8, 3.1, 2.9, 3.0, 2.8, 3.1, 3.0, 2.9)<\/code><\/pre>\n<p>Il giorno 11 e il giorno 18 sembrano sospetti. Applica i tre metodi: lo z-score con soglia |z| &gt; 3, il metodo di Tukey e il test di Grubbs. Tutti e tre concordano? Quale dei due valori \u00e8 pi\u00f9 chiaramente anomalo, e perch\u00e9?<\/p>\n<hr \/>\n<p>Fin qui abbiamo trattato ogni osservazione come indipendente dalle altre. Abbiamo chiesto: &#8220;questo valore \u00e8 compatibile con la distribuzione complessiva?&#8221; Ma i dati di traffico web hanno una struttura temporale: trend, stagionalit\u00e0, cicli settimanali. Un calo del 30% a dicembre potrebbe essere perfettamente normale per un sito B2B, mentre lo stesso calo a settembre sarebbe allarmante.<\/p>\n<p>Per distinguere un&#8217;anomalia reale dalla semplice stagionalit\u00e0 servono strumenti diversi \u2014 la decomposizione delle serie storiche in trend, componente stagionale e residuo. Sar\u00e0 l&#8217;argomento di un prossimo articolo.<\/p>\n<hr \/>\n<h3 id=\"per-approfondire\">Per approfondire<\/h3>\n<p>Per chi volesse approfondire il tema dei valori anomali e del ragionamento statistico sui dati inattesi, <em>L&#8217;arte della statistica<\/em> di David Spiegelhalter \u00e8 una lettura che affronta il problema con chiarezza e numerosi esempi dal mondo reale. <a href=\"https:\/\/www.amazon.it\/dp\/8806246623?tag=consulenzeinf-21\" rel=\"nofollow sponsored noopener\" target=\"_blank\">Si trova qui<\/a>.<\/p>\n<p>Per una trattazione pi\u00f9 formale dei test per outlier (Grubbs, Rosner, Dixon), il manuale <em>Statistica<\/em> di Newbold, Carlson e Thorne offre la copertura completa con esercizi. <a href=\"https:\/\/www.amazon.it\/dp\/8891910651?tag=consulenzeinf-21\" rel=\"nofollow sponsored noopener\" target=\"_blank\">Si trova qui<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tre metodi statistici per identificare valori anomali nei dati: z-score, IQR di Tukey e test di Grubbs. Come distinguere il rumore dai segnali importanti, con esempi pratici in R su dati di traffico web.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[629],"tags":[],"class_list":["post-3414","post","type-post","status-publish","format-standard","hentry","category-statistica-it"],"lang":"it","translations":{"it":3414,"en":3423},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"post-thumbnail":false},"uagb_author_info":{"display_name":"paolo","author_link":"https:\/\/www.gironi.it\/blog\/author\/paolo\/"},"uagb_comment_info":1,"uagb_excerpt":"Tre metodi statistici per identificare valori anomali nei dati: z-score, IQR di Tukey e test di Grubbs. Come distinguere il rumore dai segnali importanti, con esempi pratici in R su dati di traffico web.","_links":{"self":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/3414","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/comments?post=3414"}],"version-history":[{"count":5,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/3414\/revisions"}],"predecessor-version":[{"id":3454,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/3414\/revisions\/3454"}],"wp:attachment":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/media?parent=3414"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/categories?post=3414"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/tags?post=3414"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}