  <?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>seo &#8211; paologironi blog</title>
	<atom:link href="https://www.gironi.it/blog/category/seo-it/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.gironi.it/blog</link>
	<description>Appunti sparsi di (retro) informatica, analisi dei dati, statistica, seo, e cose che cambiano</description>
	<lastBuildDate>Fri, 20 Sep 2024 13:09:50 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Tracciare i moduli Elementor con Google Tag Manager</title>
		<link>https://www.gironi.it/blog/tracciare-i-moduli-elementor-con-google-tag-manager/</link>
					<comments>https://www.gironi.it/blog/tracciare-i-moduli-elementor-con-google-tag-manager/#comments</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Tue, 04 Aug 2020 08:05:28 +0000</pubDate>
				<category><![CDATA[analytics]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[Tag Manager]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[elementor]]></category>
		<category><![CDATA[tag manager]]></category>
		<guid isPermaLink="false">https://www.gironi.it/blog/?p=1794</guid>

					<description><![CDATA[In un precedente post abbiamo visto in dettaglio come tracciare in Google Analytics via Google Tag Manager i moduli generati dal plugin CF7 in WordPress. In questo post vedremo come ottenere il medesimo risultato con un altro strumento WordPress ad altissima diffusione: il visual builder Elementor. Elementor utilizza Ajax , facendo comparire a schermo un &#8230; <a href="https://www.gironi.it/blog/tracciare-i-moduli-elementor-con-google-tag-manager/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Tracciare i moduli Elementor con Google Tag Manager"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>In un <a href="https://www.gironi.it/blog/tracciare-i-moduli-contact-form-7-con-tag-manager-il-modo-piu-semplice/">precedente post</a> abbiamo visto in dettaglio come tracciare in Google Analytics via Google Tag Manager i moduli generati dal plugin CF7 in WordPress.</p>



<p>In questo post vedremo come ottenere il medesimo risultato con un altro strumento WordPress ad altissima diffusione: il visual builder Elementor.</p>



<span id="more-1794"></span>



<p>Elementor utilizza Ajax , facendo comparire a schermo un messaggio di ringraziamento dopo che è avvenuto l’invio del modulo.</p>



<p><strong>Questo significa che per far scattare il nostro attivatore in Tag Manager, al fine di conteggiare un evento, dobbiamo intercettare proprio la comparsa di questo messaggio sullo schermo.</strong></p>



<figure class="wp-block-image size-large is-resized"><img fetchpriority="high" decoding="async" src="https://www.gironi.it/blog/wp-content/uploads/2020/08/elementor-css.jpg" alt="messaggio ringraziamento form Elementor" class="wp-image-1795" width="596" height="116" srcset="https://www.gironi.it/blog/wp-content/uploads/2020/08/elementor-css.jpg 794w, https://www.gironi.it/blog/wp-content/uploads/2020/08/elementor-css-300x58.jpg 300w" sizes="(max-width: 596px) 85vw, 596px" /><figcaption>il messaggio di ringraziamento all&#8217;avvenuto invio di un modulo Elementor</figcaption></figure>



<h2 class="wp-block-heading">Creazione dell&#8217;attivatore Tag Manager</h2>



<p>Creo l’attivatore. Nell’interfaccia di GTM vado su Attivatori &gt; Nuovo &gt; e come tipo di elemento scelgo “<em>Visibilità di un elemento</em>”:</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://www.gironi.it/blog/wp-content/uploads/2020/08/attivatore-elementor-1024x743.png" alt="Configurazione attivatore Tag Manager per tracciare modulo Elementor" class="wp-image-1796" width="768" height="557" srcset="https://www.gironi.it/blog/wp-content/uploads/2020/08/attivatore-elementor-1024x743.png 1024w, https://www.gironi.it/blog/wp-content/uploads/2020/08/attivatore-elementor-300x218.png 300w, https://www.gironi.it/blog/wp-content/uploads/2020/08/attivatore-elementor.png 1130w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px" /><figcaption>La configurazione dell&#8217; attivatore Tag Manager per tracciare modulo Elementor</figcaption></figure>



<p>Dobbiamo indicare a Google Tag Manager quale elemento esatto ci interessa.</p>



<p>Apro l’inspector del browser per vedere se ci sono id oppure classi css associate al messaggio di invio riuscito.</p>



<p><strong>Nel mio caso ho trovato un div associato alla classe .elementor-message-success</strong>.</p>



<p>Quindi flaggo la voce “<em>Rileva modifiche nel DOM</em>”.</p>



<p>Salvo, aggiorno la modalità Anteprima e debug, quindi aggiorno la pagina che contiene il modulo Elementor e controllo facendo un modulo di prova.</p>



<h2 class="wp-block-heading"><strong>Google Analytics tag per tracciare il Form Elementor</strong></h2>



<p>Il prossimo passo è inviare un evento a Google Analytics ogni volta che quel messaggio di ringraziamento appare sullo schermo.</p>



<p>Nell&#8217;interfaccia di Google Tag Manager, vado su Tag&gt; Nuovo&gt; e scelgo Universal Analytics. Quindi uso le seguenti impostazioni:</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://www.gironi.it/blog/wp-content/uploads/2020/08/elementor-tag-1024x723.png" alt="Configurazione del tag " class="wp-image-1798" width="768" height="542" srcset="https://www.gironi.it/blog/wp-content/uploads/2020/08/elementor-tag-1024x723.png 1024w, https://www.gironi.it/blog/wp-content/uploads/2020/08/elementor-tag-300x212.png 300w, https://www.gironi.it/blog/wp-content/uploads/2020/08/elementor-tag.png 1177w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px" /><figcaption>Configurazione del tag</figcaption></figure>



<p>Ovviamente posso nominare i valori di Categoria, Azione ed Etichetta come preferisco.<br>Quindi faccio clic sulla sezione Attivazione e scelgo il trigger creato in precedenza (<em>Visibilità dell&#8217;elemento</em>).</p>



<h2 class="wp-block-heading">Test e messa in produzione</h2>



<p>Salvo tutte le modifiche nel contenitore di Google Tag Manager, aggiorno la modalità Anteprima e Debug, aggiorno la pagina in cui è presente il modulo Elementor. Compilo tutti i campi e invio il modulo.</p>



<p>• L&#8217;evento di visibilità dell&#8217;elemento dovrebbe apparire nella modalità Anteprima e debug.</p>



<p>• Facendo clic sull&#8217;evento nella console di debug si dovrebbe visualizzare il tag GA Event attivato</p>



<p>Ora vado ai rapporti sugli eventi in tempo reale di GA e controllo se l&#8217;evento è visibile.</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://www.gironi.it/blog/wp-content/uploads/2020/08/temporeale-1024x329.png" alt="Analytics tempo reale - verifica conteggio modulo come evento" class="wp-image-1799" width="768" height="247" srcset="https://www.gironi.it/blog/wp-content/uploads/2020/08/temporeale-1024x329.png 1024w, https://www.gironi.it/blog/wp-content/uploads/2020/08/temporeale-300x96.png 300w, https://www.gironi.it/blog/wp-content/uploads/2020/08/temporeale-1536x493.png 1536w, https://www.gironi.it/blog/wp-content/uploads/2020/08/temporeale-1200x385.png 1200w, https://www.gironi.it/blog/wp-content/uploads/2020/08/temporeale.png 1633w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px" /><figcaption>Analytics in tempo reale &#8211; verifica conteggio modulo come evento</figcaption></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/tracciare-i-moduli-elementor-con-google-tag-manager/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Analisi delle serie storiche e previsioni di serie temporali in R</title>
		<link>https://www.gironi.it/blog/analisi-delle-serie-storiche0-e-previsioni-di-serie-temporali-in-r-con-il-metodo-holt-winters/</link>
					<comments>https://www.gironi.it/blog/analisi-delle-serie-storiche0-e-previsioni-di-serie-temporali-in-r-con-il-metodo-holt-winters/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Sat, 28 Dec 2019 12:42:24 +0000</pubDate>
				<category><![CDATA[seo]]></category>
		<category><![CDATA[statistica]]></category>
		<category><![CDATA[holt-winters]]></category>
		<category><![CDATA[lisciatori]]></category>
		<category><![CDATA[livellamento]]></category>
		<category><![CDATA[serie storica]]></category>
		<category><![CDATA[trend]]></category>
		<guid isPermaLink="false">https://www.gironi.it/blog/?p=1496</guid>

					<description><![CDATA[Cosa si intende per serie storica, o serie temporale Una serie storica consta dei valori osservati in un insieme di periodi ordinati sequenzialmente. Questo, per chi fa SEO, è già un elemento del massimo interesse. I dati di traffico del nostro sito web, considerati lungo una sequenza temporale, sono infatti un esempio di serie storica. &#8230; <a href="https://www.gironi.it/blog/analisi-delle-serie-storiche0-e-previsioni-di-serie-temporali-in-r-con-il-metodo-holt-winters/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Analisi delle serie storiche e previsioni di serie temporali in R"</span></a>]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Cosa si intende per serie storica, o serie temporale</h2>



<p>Una <strong>serie storica</strong> consta dei valori osservati in un insieme di periodi ordinati sequenzialmente.  <strong>Questo, per chi fa SEO, è già un elemento del massimo interesse</strong>.       </p>



<p class="has-light-gray-background-color has-background"><strong>I dati di traffico del nostro sito web, considerati lungo una sequenza temporale, sono infatti un esempio di serie storica. </strong>            </p>



<p>L&#8217;analisi delle serie storiche è un insieme di metodi che ci consentono di ricavare schemi o statistiche significative dai dati con informazioni temporali.</p>



<p class="has-light-gray-background-color has-background">In termini molto generali, possiamo dire che <strong>una serie temporale è una sequenza di variabili casuali indicizzate nel tempo</strong>.       </p>



<p>Lo scopo dell&#8217;analisi di una serie storica può essere di tipo <strong>descrittivo</strong> (si pensi alla decomposizione della serie per rimuovere elementi di stagionalità o per evidenziare tendenze di fondo) oppure <strong>inferenziale</strong>, includendo in quest&#8217;ultimo la previsione dei valori per periodi di tempo futuri, ancora non occorsi (<em>forecasting</em>).             </p>



<span id="more-1496"></span>


				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-345acfff      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							Di cosa parleremo													<svg xmlns="https://www.w3.org/2000/svg" viewBox= "0 0 384 512"><path d="M192 384c-8.188 0-16.38-3.125-22.62-9.375l-160-160c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L192 306.8l137.4-137.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-160 160C208.4 380.9 200.2 384 192 384z"></path></svg>
																			</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#cosa-si-intende-per-serie-storica-o-serie-temporale" class="uagb-toc-link__trigger">Cosa si intende per serie storica, o serie temporale</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#un-po-di-teoria-lanalisi-classica-delle-serie-temporali-la-decomposizione-di-una-serie-storica" class="uagb-toc-link__trigger">Un po&#039; di teoria. L&#039;analisi classica delle serie temporali. La decomposizione di una serie storica.</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#le-quattro-componenti-classiche-e-il-loro-legame" class="uagb-toc-link__trigger">Le quattro componenti &quot;classiche&quot; e il loro legame</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#un-breve-ripasso-le-utili-proprietà-utili-dei-logaritmi" class="uagb-toc-link__trigger">Un breve ripasso: le utili proprietà utili dei logaritmi</a></li></ul></li><li class="uagb-toc__list"><a href="#creare-una-serie-temporale-in-r-partendo-da-un-vettore-o-un-data-frame" class="uagb-toc-link__trigger">Creare una serie temporale in R partendo da un vettore o un data frame</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#utili-funzioni-relative-a-una-serie-temporale" class="uagb-toc-link__trigger">Utili funzioni relative a una serie temporale</a></li></ul></li></ul></li><li class="uagb-toc__list"><a href="#disegnare-una-o-più-serie-storiche" class="uagb-toc-link__trigger">Disegnare una o più serie storiche</a><li class="uagb-toc__list"><a href="#tecniche-di-lisciamento-smoothing" class="uagb-toc-link__trigger">Tecniche di lisciamento (smoothing)</a><li class="uagb-toc__list"><a href="#un-esempio-di-uso-delle-serie-storiche-per-il-seo" class="uagb-toc-link__trigger">Un esempio di uso delle serie storiche per il SEO</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#limitare-leffetto-della-stagionalità-attraverso-le-medie-mobili" class="uagb-toc-link__trigger">Limitare l&#039;effetto della stagionalità attraverso le medie mobili</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#elimino-il-trend-stagionale-usando-la-differenza" class="uagb-toc-link__trigger">Elimino il trend stagionale usando la differenza</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#decompongo-la-serie-storica-attraverso-le-medie-mobili" class="uagb-toc-link__trigger">Decompongo la serie storica attraverso le medie mobili</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#decompongo-la-serie-con-il-metodo-loess" class="uagb-toc-link__trigger">Decompongo la serie con il metodo LOESS</a></li></ul></li></ul></li></ul></li><li class="uagb-toc__list"><a href="#livellamento-esponenziale-con-il-metodo-di-holt-winters-e-previsione" class="uagb-toc-link__trigger">Livellamento esponenziale con il metodo di Holt-Winters e previsione</a><li class="uagb-toc__list"><a href="#indagare-le-serie-storiche-con-i-modelli-arima" class="uagb-toc-link__trigger">Indagare le serie storiche con i modelli ARIMA</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#il-rumore-bianco-white-noise" class="uagb-toc-link__trigger">Il rumore bianco (white noise)</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#la-passeggiata-aleatoria-random-walk" class="uagb-toc-link__trigger">La passeggiata aleatoria (random walk)</a></li></ul></li></ul></li></ul></li></ul></li><li class="uagb-toc__list"><a href="#il-modello-arima-in-azione" class="uagb-toc-link__trigger">Il modello ARIMA in azione</a><li class="uagb-toc__list"><a href="#vediamo-un-esempio-pratico-di-modello-arima" class="uagb-toc-link__trigger">Vediamo un esempio pratico di modello ARIMA</a></ul></ul></ul></ul></ol>					</div>
									</div>
				</div>
			


<hr class="wp-block-separator has-css-opacity"/>



<h3 class="wp-block-heading">Un po&#8217; di teoria. L&#8217;analisi classica delle serie temporali. La decomposizione di una serie storica.</h3>



<p> Il metodo classico di analisi delle serie storiche individua quattro influenze, o <strong>componenti</strong>:             </p>



<ol class="wp-block-list">
<li> <strong>Trend (T) </strong>:<strong> </strong>il movimento generale a lungo termine dei valori (Y) della serie storica, in un periodo di tempo ampio.                 </li>



<li> <strong>Fluttuazioni cicliche (C) </strong>: movimenti ricorrenti di lunga durata.                 </li>



<li> <strong>Variazioni stagionali (S) </strong>: fluttuazioni dovute al particolare periodo dell&#8217;anno, ad esempio la stagione estiva rispetto ai mesi invernali.                 </li>



<li> <strong>Movimenti erratici o irregolari (I)</strong> : deviazioni irregolari dalla tendenza, che non possono essere ascritte a influenze cicliche oppure stagionali.                 </li>
</ol>



<p><strong>Secondo il modello dell&#8217;analisi classica delle serie storiche, il valore della variabile in ogni periodo è determinato dalle influenze delle quattro componenti.     </strong>        </p>



<p>Lo scopo principale dell&#8217;analisi classica delle serie temporali è proprio quello di <strong>scomporre la serie</strong>, per isolare le influenze delle varie componenti che determinano i valori della serie storica.             </p>



<h3 class="wp-block-heading">Le quattro componenti &#8220;classiche&#8221; e il loro legame</h3>



<p>Le quattro componenti posso essere tra loro legate <strong>in modo additivo:</strong>             </p>



<p>
<strong>Y = T + C + S + I</strong>
            </p>



<p> ovvero in modo <strong>moltiplicativo:</strong>             </p>



<p>
<strong>Y = T x C x S x I</strong>
            </p>



<p>Ricordo che un modello moltiplicativo può essere trasformato nel modello additivo sfruttando le proprietà dei logaritmi:             </p>



<p> <strong>log(Y) = log(T) + log(C) + log(S) + log(I)</strong>             </p>



<hr class="wp-block-separator has-css-opacity"/>



<h3 class="wp-block-heading">Un breve ripasso: le utili proprietà utili dei logaritmi</h3>



<p class="has-background has-light-gray-background-color">
Il logaritmo di un numero <i>n</i> nella base <i>c</i> (con c diverso da 1 e c &gt;0) è l&#8217;esponente al quale è necessario elevare la base <i>c</i> per ottenere <i>n</i>.<br><br>Dunque, se n = c<sup>b</sup> allora log<sub>c</sub> n = b
</p>



<ul class="wp-block-list">
<li>Quando si moltiplicano tra loro dei numeri, il logaritmo del loro prodotto è la somma dei loro logaritmi.</li>



<li>Il logaritmo di una frazione è il logaritmo del numeratore meno il logaritmo del denominatore.</li>



<li>Il logaritmo di un numero con esponente è il logaritmo moltiplicato per l&#8217;esponente del numero.</li>
</ul>



<hr class="wp-block-separator has-css-opacity"/>



<h2 class="wp-block-heading">Creare una serie temporale in R partendo da un vettore o un data frame</h2>



<p>Esistono vari modi per trasformare un vettore di dati, una matrice oppure un data frame in una serie temporale.<br>In questa sede ci limiteremo agli strumenti offerti, per ottenere tale risultato, dal pacchetto base R.<br>La funzione di nostro interesse si chiama semplicemente <strong>ts()</strong> ed ha un utilizzo piuttosto intuitivo.</p>



<p>Vediamo un esempio pratico. Supponiamo di avere un vettore di dati salvato con il nome mieidati.csv nella cartella /home del mio pc.</p>



<p>La prima cosa che farò, sarà quella di importare in R i miei dati che ipotizzo presenti in un file csv:</p>



<pre class="wp-block-preformatted"><strong># importo i dati da file csv in un dataframe</strong><br>dfmieidati &lt;- read_csv(“/home/mieidati.csv”)</pre>



<pre class="wp-block-preformatted"><strong># creo un vettore con i dati che mi interessano</strong><br>mieidati &lt;- dfimieidati$miaosservazione</pre>



<p>Ora non mi resta che invocare la funzione ts() con gli opportuni valori di inizio e di frequenza per creare la mia serie temporale.</p>



<p>Ipotizziamo che i dati siano mensili e comincino con gennaio 2012 e vadano fino a dicembre 2018:</p>



<pre class="wp-block-preformatted">serietemporale &lt;- ts(mieidati, start=c(2012,1), end=c(2018,12), frequency=12)</pre>



<p>come si vede la forma tipica della funzione ts() è </p>



<pre class="wp-block-preformatted">ts(vettore, inizio, fine, frequenza) </pre>



<p>dove per <strong>frequenza si intende il numero di osservazioni per unità di tempo</strong>.</p>



<p><strong>Quindi avremo 1= annuale, 4=trimestrale, 12=mensile…</strong><br></p>



<h3 class="wp-block-heading">Utili funzioni relative a una serie temporale</h3>



<p>Posso facilmente conoscere il tempo della prima osservazione di una serie storica usando il comando:</p>



<pre class="wp-block-preformatted">start()</pre>



<p>Analogamente, posso trovare l’ultima osservazione con:</p>



<pre class="wp-block-preformatted">end()</pre>



<p>Il comando:</p>



<pre class="wp-block-preformatted">frequency()</pre>



<p>mi restituisce il numero delle osservazioni per unità di tempo, mentre l’utilissimo comando</p>



<pre class="wp-block-preformatted">window()</pre>



<p>consente di estrarre un sottoinsieme di dati. </p>



<p>Usando a mo&#8217; d&#8217;esempio un dataset compreso in R chiamato <em>Nile</em> contenente 100 letture annuali del fiume Nilo ad Aswan per gli anni dal 1871 al 197 (lo useremo anche nel paragrafo che segue) il comando si presenta così:</p>



<pre class="wp-block-preformatted">nile_sub &lt;- window(Nile, start=1940,end=1960)</pre>



<h2 class="wp-block-heading">Disegnare una o più serie storiche</h2>



<p>Uno dei vantaggi nell’uso delle serie temporali è rappresentato dalla semplicità nella rappresentazione grafica. Usando il dataset di esempio <em><strong>Nile</strong></em> presente in R, che è già un oggetto serie temporale – e posso verificarlo con il comando <strong>is.ts(Nile)</strong> -, mi basterà il comando:</p>



<pre class="wp-block-preformatted">plot.ts(Nile)</pre>



<p>per avere un grafico dell’andamento nel tempo della mia variabile. Ovviamente posso usare i vari attributi <em>xlab</em>, <em>ylab</em>,<em>main</em> ecc&#8230; per rendere ancora più significativo e chiaro il mio grafico:</p>



<pre class="wp-block-preformatted">plot(Nile, xlab="Anno", ylab="Flusso annuale del fiume Nilo", main="Serie Storica di esempio Nilo")</pre>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img decoding="async" width="855" height="540" src="https://www.gironi.it/blog/wp-content/uploads/2020/07/nilo-esempio.png" alt="serie storica di esempio: Nile" class="wp-image-1747" style="width:641px;height:405px" srcset="https://www.gironi.it/blog/wp-content/uploads/2020/07/nilo-esempio.png 855w, https://www.gironi.it/blog/wp-content/uploads/2020/07/nilo-esempio-300x189.png 300w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption">plot della serie storica Nile</figcaption></figure>
</div>


<p>Se il dataset contiene più di un oggetto serie temporale, potrò ottenere il grafico dei vari oggetti.</p>



<p>Usiamo un altro dataset di esempio presente in R chiamato <em>EuStockMarkets</em> che contiene, come si può facilmente immaginare, le quotazioni dei listini FTSE, CAC, DAX e SMI :</p>



<pre class="wp-block-preformatted">plot(EuStockMarkets, plot.type = "multiple",)</pre>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="855" height="540" src="https://www.gironi.it/blog/wp-content/uploads/2020/07/eustockmarkets-multiple.png" alt="Plot di più oggetti temporali - esempio" class="wp-image-1748" style="width:641px;height:405px" srcset="https://www.gironi.it/blog/wp-content/uploads/2020/07/eustockmarkets-multiple.png 855w, https://www.gironi.it/blog/wp-content/uploads/2020/07/eustockmarkets-multiple-300x189.png 300w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption">Plot di più oggetti temporali</figcaption></figure>



<p>Oppure potrò disegnare i vari oggetti serie temporale tutti insieme – con colori differenti – nello stesso grafico:</p>



<pre class="wp-block-preformatted">plot.ts(EuStockMarkets, plot.type = "single", col=c("red","black","blue","green"))</pre>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img decoding="async" width="855" height="540" src="https://www.gironi.it/blog/wp-content/uploads/2020/07/eustockmarkets-insieme.png" alt="Plot di più oggetti temporali nello stesso grafico - esempio" class="wp-image-1750" style="width:641px;height:405px" srcset="https://www.gironi.it/blog/wp-content/uploads/2020/07/eustockmarkets-insieme.png 855w, https://www.gironi.it/blog/wp-content/uploads/2020/07/eustockmarkets-insieme-300x189.png 300w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption">Plot di più oggetti temporali nello stesso grafico</figcaption></figure>
</div>


<hr class="wp-block-separator has-css-opacity"/>



<h2 class="wp-block-heading">Tecniche di lisciamento (<em>smoothing</em>)</h2>



<p>Se andiamo a rappresentare graficamente una serie temporale, noteremo quasi sempre tutta una serie di piccole variazioni che possono rendere assai arduo l&#8217;obiettivo di individuare tendenze importanti e fare previsioni per il futuro. Proprio per approcciare questo problema sono state sviluppate varie tecniche di «<strong>lisciamento</strong>» (<em>smoothing</em>), che possiamo per semplicità suddividere in due grandi famiglie: le tecniche che si basano su <strong>medie mobili</strong> e le <strong>tecniche esponenziali</strong>.       </p>



<p class="has-yellow-background-color has-background"><strong>MEDIA MOBILE</strong><br>Al posto del dato relativo al mese X calcolo la media di un numero n di mesi di cui X è il punto centrale. <br>La componente casuale, si compensa se mettiamo assieme diversi mesi, la sua media è uguale a 0 per un numero ragionevole di periodi.<br>La componente stagionale si ripete regolarmente nel corso dell’anno, allora se distribuisco l’effetto stagionale su tutti i 12 mesi, l’effetto scompare. <br>Con la media mobile ottengo tutte e due gli effetti voluti: compenso la casualità e “distribuisco” la stagionalità.</p>



<p>R, come vedremo a breve, ci fornisce un aiuto fondamentale mettendoci a disposizione tutta una serie di strumenti per effettuare le nostre analisi con la massima praticità.</p>



<h2 class="wp-block-heading">Un esempio di uso delle serie storiche per il SEO</h2>



<p>Come abbiamo visto, possiamo creare facilmente una serie storica in R usando il comando di base ts().</p>



<p>Dal momento che ho intenzione di usare l&#8217;analisi delle serie storiche a fini SEO per ricavare una tendenza e fare una previsione, ho bisogno di <strong>importare i dati della mia vista Google Analytics in R</strong>. <br><br>Posso farlo in maniera &#8220;automatica&#8221;, usando l&#8217;utilissima libreria <strong><a aria-label="googleAnalyticsR (apre in una nuova scheda)" rel="noreferrer noopener" href="https://code.markedmondson.me/googleAnalyticsR/" target="_blank">googleAnalyticsR</a></strong> (che magari sarà oggetto di un post successivo più dettagliato) oppure esportando i dati che mi servono via <a aria-label="Query Explorer (apre in una nuova scheda)" rel="noreferrer noopener" href="https://ga-dev-tools.appspot.com/query-explorer/" target="_blank"><strong>Query Explorer</strong></a>.<br><br>Vediamo il primo caso:</p>



<pre class="wp-block-preformatted"># uso la libreria googleAnalyticsR
# che ovviamente devo aver 
# correttamente installato
library(googleAnalyticsR)

# setto l'id della mia vista
# codice numerico ids che trovo 
# in Analytics o in Query Esplorer:
view_id &lt;- xxxxxxxxxx 

# Autorizzo Google Analytics
ga_auth()

# Recupero i dati che mi servono
# le sessioni da inizio 2017 
# a tutto il 2019 - da Google Analytics
gadata &lt;- google_analytics(view_id, 
          date_range = c("2017-01-01", "2019-12-31"),
          metrics = "sessions", 
          dimensions = c("yearMonth"),
          max = -1)

# Converto i dati in una serie temporale 
# con cadenza mensile indicando frequency=12:
ga_ts &lt;- ts(gadata$sessions, start = c(2017,01), end = c(2019,12), frequency = 12)</pre>



<p class="has-white-background-color has-background">La procedura per ottenere lo stesso risultato partendo da un file tsv è altrettanto semplice.<br><br>Per prima cosa vado sull&#8217;interfaccia di <a aria-label="Query Explorer (apre in una nuova scheda)" rel="noreferrer noopener" href="https://ga-dev-tools.appspot.com/query-explorer/" target="_blank">Query Explorer</a><br>e seleziono il mio account e la vista. <br><br>Scelgo la data di inizio e quella di fine (nel mio esempio dal primo gennaio 2017 al 31 dicembre 2019), la metrica che mi interessa (<em>ga:sessions</em>), la dimensione (<em>ga:date</em>). <br>Un clic sul bottone &#8220;Run Query&#8221; ed avrò a video il risultato, che posso scaricare in locale cliccando su &#8220;Download Results as TSV&#8221;. <br><br>Nel mio esempio salvo il file come <em>nomefile.tsv<br></em><br>Ora apro con un editor di testo il file ed elimino le prime righe con le informazioni generali e in fondo al file il totale generale. <br><br>Se voglio, posso rinominare la riga di header, sostituendo &#8220;<em>ga:date</em>&#8221; con &#8220;data&#8221; e &#8220;<em>ga:sessions</em>&#8221; con &#8220;sessioni&#8221;, per una migliore leggibilità. <br><br>Non ci resta che importare il tsv e creare la serie temporale. Questione di due righe:</p>



<pre class="wp-block-preformatted"># Importo un semplicissimo dataset 
# con data e utenti per giorno
 sitomese &lt;- read.csv('c:/percorso/nomefile.tsv', header = TRUE, sep = "\t")

# Converto i dati in una serie temporale
 sitomese_ts &lt;- ts(sitomese$sessioni, start = c(2017,01), end = c(2019,12), frequency = 12)</pre>



<p class="has-white-background-color has-background">Ora che ho la mia serie temporale, ho a disposizione una molteplicità di pacchetti R che mi forniscono tutti gli strumenti utili per analisi di qualunque tipo, dalle più elementari a quelle più approfondite.</p>



<h3 class="wp-block-heading">Limitare l&#8217;effetto della stagionalità attraverso le medie mobili</h3>



<p>Installo il pacchetto <em>forecast</em> per poter usare l&#8217;utilissima funzione <strong>ma()</strong>:</p>



<pre class="wp-block-preformatted">library(forecast)
sitomese.filt&lt;-ma(sitomese_ts,order=12)
sitomese.filt</pre>



<p>In questo modo si è applicata una <strong>media ponderata</strong> alla nostra serie temporale, in modo da <strong>limitare l&#8217;effetto  della stagionalità</strong>. Posso ora visualizzare la tendenza stimata con il sistema della media mobile:</p>



<pre class="wp-block-preformatted">lines(sitomese.filt,col="red")</pre>



<h3 class="wp-block-heading">Elimino il trend stagionale usando la differenza</h3>



<p>Usando la differenza con la funzione diff() e un lag appropriato, ho la possibilità di eliminare il trend stagionale, qualora presente. Nel caso di una serie storica con dati mensili che comprende più anni di osservazioni, mi basta usare un lag=12, come in questo banale esempio nel quale ipotizzo di lavorare su una serie temporale x:</p>



<pre class="wp-block-preformatted"># elimino il trend stagionale
# ipotizzo dati mensili e la presenza di stagionalità
dx &lt;- diff(x, lag=12)
ts.plot(dx, main="Tendenza utenti destagionalizzata")</pre>



<h3 class="wp-block-heading">Decompongo la serie storica attraverso le medie mobili</h3>



<p>Abbiamo visto nel corso dell’articolo che il metodo classico di analisi delle serie storiche individua quattro influenze, o <strong>componenti </strong><strong>e che l</strong><strong>o scopo principale è proprio quello di </strong><strong>scomporre la serie</strong><strong>, per isolare le influenze delle varie componenti che determinano i valori della serie storica.</strong></p>



<p>Passando dalla teoria alla pratica, vediamo come possiamo procedere.<br>Posso sfruttare la funzione <strong>decompose()</strong> del pacchetto <em>stats</em> per operare una classica decomposizione della mia serie temporale nelle componenti usando il sistema delle medie mobili e rappresentando in un solo chiarissimo grafico il tutto:</p>



<pre class="wp-block-preformatted"># decompongo la serie temporale. Ho scelto una decomposizione 
# moltiplicativa, ovviamente avrei
# potuto scegliere una additiva
componenti &lt;- decompose(sitomese_ts, type ="multiplicative")
names(componenti)
# esploro nel grafico le componenti della serie storica
plot(componenti)</pre>



<h3 class="wp-block-heading">Decompongo la serie con il metodo LOESS</h3>



<p>Un&#8217;alternativa più raffinata per la decomposizione della serie è quella che usa il metodo <strong>loess</strong> (Locally Weighted Smoothing). Si tratta di un insieme di metodi non-parametrici che adattano i modelli di regressione polinomiale ai sottoinsiemi di dati. Utilizziamo a tale scopo la funzione <strong>stl() </strong>del pacchetto <em>stats</em>:</p>



<pre class="wp-block-preformatted"># uso stl per un decompose di tipo LOESS
sitomese-loess &lt;- stl(sitomese_ts, s.window="periodic")
names(sitomese-loess)
plot(sitomese-loess)</pre>



<h2 class="wp-block-heading">Livellamento esponenziale con il metodo di Holt-Winters e previsione</h2>



<p>Le tecniche di lisciamento (<em>smoothing</em>) e previsione (<em>forecast</em>) ci offrono potenti modalità operative al fine di prevedere valori futuri dei dati delle serie temporali.</p>



<p>Al livello più elementare, il livellamento può essere realizzato utilizzando le <strong>medie mobili</strong>.</p>



<p>In R, possiamo usare <strong>HoltWinters</strong>, una funzione per eseguire il livellamento delle serie storiche.<br>La funzione contiene tre metodi di <em>smoothing</em> esponenziali. Tutti e tre i metodi usano la stessa funzione, HoltWinters. Tuttavia, possiamo invocarli separatamente in base ai valori dei parametri alpha, beta e gamma.</p>



<p>Il livellamento esponenziale Holt-Winters fornisce previsioni attendibili solo se non è presente autocorrelazione nei dati della serie temporale, cosa che può essere verificata, come vedremo tra breve in pratica, con la funzione <strong>acf</strong> e con un <strong>test Box–Pierce o Ljung–Box</strong>.</p>



<p>Dopo aver creato un modello di previsione, dobbiamo infatti valutarlo per capire se rappresenta correttamente i dati. In maniera analoga ad un modello di regressione, possiamo usare per questo scopo i <strong>residui</strong>. Se i residui seguono una distribuzione di tipo <strong>rumore bianco</strong> (<em>white noise</em>), allora la sequenza (o errore) dei residui è generata da un processo di tipo stocastico. E quindi il nostro modello ben rappresenta la serie temporale.</p>



<p>Vediamo un esempio. Supponiamo di avere una serie storica x :</p>



<pre class="wp-block-preformatted"># Usiamo la funzione forecast per una previsione: prossimi 6 periodi
futuro.pre &lt;- forecast(x.pre, h=6)
# stampiamo a video un riepilogo
summary(futuro.pre)
# disegniamo il grafico
plot(futuro.pre)

# disegniamo il grafico dei residui per stimare l’autocorrelazione
acf(futuro.pre$residuals,na.action = na.pass)
# facciamo un test di autocorrelazione
Box.test(futuro.pre$residuals)</pre>



<p><strong>L’autocorrelazione ci indica se i termini di una serie storica dipendono dal proprio passato.</strong><br><br>Se consideriamo una serie temporale x di lunghezza n, l’autocorrelazione di lag 1 può essere stimata come la correlazione della coppia di osservazioni (x[t], x[t-1]).</p>



<p>R ci mette a disposizione un comodo comando: <strong>acf()</strong>.<br>Usando:</p>



<pre class="wp-block-preformatted">acf(x, lag.max = 1, plot = FALSE)</pre>



<p>sulla serie x viene automaticamente calcolata l’autocorrelazione di grado -1.</p>



<p>di default il comando acf(x) traccia un grafico, che mostra due righe orizzontali blu tratteggiate, che rappresentano l’intervallo di confidenza al 95%. <br>La stima dell’autocorrelazione è indicata dall’altezza delle barre verticali (<em>ovviamente l’autocorrelazione al grado 0 è sempre 1</em>).</p>



<p>L’intervallo di confidenza è usato per determinare la significatività statistica dell’autocorrelazione.</p>



<p>Mostro a mo’ d’esempio l’output della funzione acf() sulla serie storica Nile fornita da R:</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="855" height="540" src="https://www.gironi.it/blog/wp-content/uploads/2020/07/acf-nile.png" alt="Esempio di grafico acf di autocorrelazione di una serie storica" class="wp-image-1772" style="width:641px;height:405px" srcset="https://www.gironi.it/blog/wp-content/uploads/2020/07/acf-nile.png 855w, https://www.gironi.it/blog/wp-content/uploads/2020/07/acf-nile-300x189.png 300w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /></figure>



<p>Se il coefficiente di autocorrelazione diminuisce e cade rapidamente tra i bordi, ciò significa che i residui seguono una distribuzione di tipo rumore bianco. Non c&#8217;è evidente autocorrelazione.<br>Al contrario, se i coefficienti sono sempre sopra o sotto il limite, ciò significa che i residui sono autocorrelati.</p>



<p>Un test di autocorrelazione <strong>Ljung-Box</strong> è una forma particolare di test delle ipotesi, e fornisce un valore<em> p</em> come output, valore che ci consente di capire se rigettare l&#8217;ipotesi nulla o meno.</p>



<p>Applichiamo la funzione box.test sulla sequenza residua; troviamo il valore p. Se esso è superiore al valore di α non possiamo rifiutare l&#8217;ipotesi nulla. Cioè, i residui sono rumore bianco e ciò dimostra che il nostro modello &#8220;funziona bene&#8221; nella previsione del valore.</p>



<p>Vediamo il tutto in azione nel nostro esempio SEO relativo al traffico di un sito web, usando anche la libreria <em>highcharter</em> per una migliore visualizzazione dell&#8217;output:</p>



<pre class="wp-block-preformatted"># Per prima cosa carico le librerie che mi servono

<strong>library(googleAnalyticsR)</strong> 
# per leggere i dati Analytics

<strong>library(forecast)</strong> 
# per le previsioni su serie temporali

<strong>library(highcharter) </strong>
# per ottenere il grafico

# qua inserisco il codice ID
# per trovarlo basta loggarsi 
# in Analytics Query Explorer
# https://ga-dev-tools.appspot.com/query-explorer/
# e leggere il valore "ids" 
# per la vista che ci interessa
<strong>view_id &lt;- xxxxxxxxx</strong>

# Autorizzo Google Analytics
<strong>ga_auth()</strong>

# e poi recupero i dati da Google Analytics
<strong>sitomese &lt;- google_analytics_4(view_id, 
            date_range = c("2017-01-01", "2019-12-31"),
            metrics = "sessions", 
            dimensions = c("yearMonth"),
            max = -1)</strong>
# nb: la dimensione dei miei dati è annomese

# Ora esprimo i dati come serie temporale
<strong>sitomese_ts &lt;- ts(sitomese$sessions, start = c(2017,01), end = c(2019,12), frequency = 12)</strong>
 
# Calcolo il livellamento Holt-Winters
<strong>previsione &lt;- HoltWinters(sitomese_ts)</strong>

# Genero una previsione per i prossimi 12 mesi
<strong>hchart(forecast(previsione, h = 12))</strong></pre>



<p>A chi legge il compito di testare la bontà del modello previsionale.</p>



<h2 class="wp-block-heading">Indagare le serie storiche con i modelli ARIMA</h2>



<p>L&#8217;uso del metodo di livellamento esponenziale richiede che i residui non siano correlati. Nei casi reali, questo è abbastanza improbabile. Abbiamo però altri strumenti a disposizione per affrontare anche questi casi: R ci fornisce la funzione ARIMA per costruire modelli di serie temporale che prendano in considerazione l’autocorrelazione.</p>



<h3 class="wp-block-heading">Il rumore bianco (white noise)</h3>



<p>L’utilissima funzione arima.sim consente di simulare un processo ARIMA generando i dati di una serie temporale ad hoc.</p>



<p>Attraverso questa funzione, dunque, possiamo iniziare a vedere due modelli di serie temporali basilari: il <strong>rumore bianco</strong> (<em><strong>white noise</strong></em>) e la <strong>passeggiata </strong><strong>aleatoria</strong> (<em><strong>random walk</strong></em>).</p>



<p>Un modello ARIMA consta di tre componenti: ARIMA(p,d,q).</p>



<ul class="wp-block-list">
<li>p è l’ordine di autoregressione</li>



<li>d è l’ordine dell’integrazione</li>



<li>q è l’ordine della media mobile</li>
</ul>



<p>Il rumore bianco è l’esempio più elementare di processo stazionario. Le caratteristiche salienti:</p>



<ol class="wp-block-list">
<li>Presenta una media fissa, costante.</li>



<li>Ha varianza costante.</li>



<li>Non segue nessuna correlazione temporale.</li>
</ol>



<p>Il modello white noise in termini ARIMA è dunque ARIMA(0,0,0).</p>



<p>Andiamo allora a simulare una serie temporale di questo tipo:</p>



<pre class="wp-block-preformatted">wn &lt;- arima.sim(model = list(order = c(0,0,0)), n=100)
ts.plot(wn)</pre>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="855" height="540" src="https://www.gironi.it/blog/wp-content/uploads/2020/08/rumore-bianco-ts.png" alt="Esempio di serie temporale Rumore Bianco (White Noise)" class="wp-image-1781" style="width:641px;height:405px" srcset="https://www.gironi.it/blog/wp-content/uploads/2020/08/rumore-bianco-ts.png 855w, https://www.gironi.it/blog/wp-content/uploads/2020/08/rumore-bianco-ts-300x189.png 300w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption">Un esempio di serie temporale di un processo White Noise</figcaption></figure>



<h3 class="wp-block-heading">La passeggiata aleatoria (random walk)</h3>



<p>Il Random Walk è un semplice esempio di <strong>processo non-stazionario</strong>. Presenta queste caratteristiche salienti:</p>



<ul class="wp-block-list">
<li>Non ha una media o una varianza specifici</li>



<li>Mostra una forte dipendenza temporale</li>



<li>I suoi cambiamenti o incrementi sono di tipo Rumore Bianco (White Noise)</li>
</ul>



<p>Anche il modello della passeggiata aleatoria è un modello di base di serie temporale, e può essere facilmente simulato con la nostra funzione arima.sim.<br>Il modello Random Walk è la somma cumulativa di serie Rumore Bianco aventi media zero.<br>Da questo discende che la prima serie differenziata di una serie Random Walk è una serie White Noise!</p>



<p>Il modello ARIMA per una serie Random Walk è ARIMA(0,1,0).</p>



<p>Generiamo una serie di questo tipo e visualizziamola:</p>



<pre class="wp-block-preformatted">RW &lt;- arima.sim(model = list(order = c(0,1,0)), n = 100)
ts.plot(RW)</pre>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="855" height="540" src="https://www.gironi.it/blog/wp-content/uploads/2020/08/RW-ts.png" alt="Esempio di modello Passeggiata aleatoria (Random Walk)" class="wp-image-1783" style="width:641px;height:405px" srcset="https://www.gironi.it/blog/wp-content/uploads/2020/08/RW-ts.png 855w, https://www.gironi.it/blog/wp-content/uploads/2020/08/RW-ts-300x189.png 300w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption">Grafico di una serie storica di tipo Random Walk</figcaption></figure>



<p>vediamo la controprova di quanto affermato sopra:</p>



<pre class="wp-block-preformatted">RWdiff &lt;- diff(RW)
ts.plot(RW-diff)</pre>



<p>Otteniamo proprio una serie di tipo White Noise:</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="855" height="540" src="https://www.gironi.it/blog/wp-content/uploads/2020/08/RWdiff.png" alt="Diff serie Random Walk" class="wp-image-1784" style="width:641px;height:405px" srcset="https://www.gironi.it/blog/wp-content/uploads/2020/08/RWdiff.png 855w, https://www.gironi.it/blog/wp-content/uploads/2020/08/RWdiff-300x189.png 300w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /></figure>



<h2 class="wp-block-heading">Il modello ARIMA in azione</h2>



<p>Il modello autoregressivo integrato a media mobile (ARIMA &#8211; <em>AutoRegressive Integrated Moving Average</em>) è noto anche come <strong>modello Box-Jenkins</strong>, dal nome degli statistici George Box e Gwilym Jenkins.</p>



<p>Lo scopo di ARIMA è di trovare il modello che meglio rappresenti i valori di una serie storica.</p>



<p>Un modello ARIMA può essere espresso come ARIMA (p, d, q), dove, come abbiamo già visto, p è l&#8217;ordine del modello autoregressivo, d indica il grado di differenziazione e q indica l&#8217;ordine della media mobile..</p>



<p><strong>Operativamente, possiamo definire cinque passaggi per adattare le serie storiche a un modello ARIMA</strong>:</p>



<ol class="wp-block-list">
<li>Visualizzare le serie temporali con un grafico.</li>



<li>Differenziare le serie storiche non stazionarie per ottenere serie temporali stazionarie.</li>



<li>Tracciare grafici ACF e PACF per trovare i valori ottimali di p e q, oppure ricavarli usando la funzione auto.arima.</li>



<li>Costruire il modello ARIMA.</li>



<li>Fare la previsione.</li>
</ol>



<h2 class="wp-block-heading">Vediamo un esempio pratico di modello ARIMA</h2>



<p>1. Simulo un processo ARIMA grazie alla funzione arima.sim() e disegno il grafico:</p>



<pre class="wp-block-preformatted">simts &lt;- arima.sim(list(order = c(1,1,0), ar = 0.64), n = 100)
plot(simts)</pre>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="855" height="540" src="https://www.gironi.it/blog/wp-content/uploads/2020/08/arimasim.png" alt="simulazione modello ARIMA" class="wp-image-1788" style="width:641px;height:405px" srcset="https://www.gironi.it/blog/wp-content/uploads/2020/08/arimasim.png 855w, https://www.gironi.it/blog/wp-content/uploads/2020/08/arimasim-300x189.png 300w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /></figure>



<p>2. Faccio la differenza per ottenere una serie storica stazionaria e traccio il grafico:</p>



<pre class="wp-block-preformatted">simts.diff &lt;- diff(simts)
plot(simts.diff)</pre>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="855" height="540" src="https://www.gironi.it/blog/wp-content/uploads/2020/08/simts-diff.png" alt="serie stazionaria" class="wp-image-1789" style="width:641px;height:405px" srcset="https://www.gironi.it/blog/wp-content/uploads/2020/08/simts-diff.png 855w, https://www.gironi.it/blog/wp-content/uploads/2020/08/simts-diff-300x189.png 300w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /></figure>



<p>3. Uso la funzione auto.arima per stimare i migliori valori di p,d, e q:</p>



<pre class="wp-block-preformatted">auto.arima(simts, ic="bic")


Series: simts 
ARIMA(1,1,0) 
Coefficients: 
ar1 0.6331 
s.e. 0.0760 
sigma^2 estimated as 0.9433: log likelihood=-138.73 
AIC=281.46 AICc=281.58 BIC=286.67</pre>



<p>4. Creo il modello ARIMA con i valori p,d e q indicati (nel nostro esempio 1,1,0):</p>



<pre class="wp-block-preformatted">fit &lt;- Arima(simts, order=c(1,1,0))
summary(fit)</pre>



<p>5. Basandoci ora sul nostro modello ARIMA possiamo passare alla previsione di valori futuri della serie e a tracciare il grafico:</p>



<pre class="wp-block-preformatted">fit.prev &lt;- forecast(fit)
summary(fit.prev)
plot(fit.prev)</pre>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="855" height="540" src="https://www.gironi.it/blog/wp-content/uploads/2020/08/arimaprev.png" alt="forecast arima" class="wp-image-1790" style="width:641px;height:405px" srcset="https://www.gironi.it/blog/wp-content/uploads/2020/08/arimaprev.png 855w, https://www.gironi.it/blog/wp-content/uploads/2020/08/arimaprev-300x189.png 300w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /></figure>



<p>Le aree colorate mostrano gli intervalli di confidenza all’80% e al 95%.</p>



<p>Passiamo infine a valutare la bontà del nostro modello con un grafico acf():</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="855" height="540" src="https://www.gironi.it/blog/wp-content/uploads/2020/08/prev-res.png" alt="autocorrelologramma" class="wp-image-1791" style="width:641px;height:405px" srcset="https://www.gironi.it/blog/wp-content/uploads/2020/08/prev-res.png 855w, https://www.gironi.it/blog/wp-content/uploads/2020/08/prev-res-300x189.png 300w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /></figure>



<p>Come per il modello di livellamento esponenziale, possiamo usare la funzione acf per calcolare i residui e creare il diagramma di autocorrelazione. Poiché il coefficiente di autocorrelazione diminuisce rapidamente, i residui sono rumore bianco.</p>



<p>Possiamo anche fare un test Box-Pierce:</p>



<pre class="wp-block-preformatted">Box.test(fit.prev$residuals)

Box-Pierce test 
data: fit.prev$residuals 
X-squared = 0.020633, df = 1, p-value = 0.8858</pre>



<p>e otteniamo un valore p che indica la non rigettabilità dell’ipotesi nulla.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/analisi-delle-serie-storiche0-e-previsioni-di-serie-temporali-in-r-con-il-metodo-holt-winters/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Come redirigere gli indirizzi http verso https</title>
		<link>https://www.gironi.it/blog/come-redirigere-gli-indirizzi-http-verso-https/</link>
					<comments>https://www.gironi.it/blog/come-redirigere-gli-indirizzi-http-verso-https/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Thu, 07 Nov 2019 10:08:40 +0000</pubDate>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://www.gironi.it/blog/?p=1366</guid>

					<description><![CDATA[Più che un post, questo è un memo-express.Senza perdermi in spiegazioni, che rimando magari a un post più dettagliato (e sensato) futuro, ecco la soluzione quick-and-dirty via .htaccess: RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.nomedeldominio.it/$1 [R,L]]]></description>
										<content:encoded><![CDATA[
<p>Più che un post, questo è un memo-express.<br>Senza perdermi in spiegazioni, che rimando magari a un post più dettagliato (e sensato) futuro, ecco la soluzione quick-and-dirty via .htaccess:</p>



<pre class="wp-block-preformatted">RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.nomedeldominio.it/$1 [R,L]</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/come-redirigere-gli-indirizzi-http-verso-https/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Un breve manifesto (personale) per l&#8217;attività SEO</title>
		<link>https://www.gironi.it/blog/un-breve-manifesto-personale-per-lattivita-seo/</link>
					<comments>https://www.gironi.it/blog/un-breve-manifesto-personale-per-lattivita-seo/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Thu, 27 Dec 2018 18:06:37 +0000</pubDate>
				<category><![CDATA[seo]]></category>
		<category><![CDATA[statistica]]></category>
		<guid isPermaLink="false">https://www.gironi.it/blog/?p=1196</guid>

					<description><![CDATA[L&#8217;esigenza che avverto, frutto di molti anni di attività nel settore, è quella di affermare l&#8217;importanza decisiva di un elementare rigore scientifico nell&#8217;analisi dei dati di traffico al fine di calibrare con accuratezza e non solo « a sentimento» (anche se i sentimenti sono importanti!) gli interventi SEO per i propri clienti. Gli strumenti a &#8230; <a href="https://www.gironi.it/blog/un-breve-manifesto-personale-per-lattivita-seo/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Un breve manifesto (personale) per l&#8217;attività SEO"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>L&#8217;esigenza che avverto, frutto di molti anni di attività nel settore, è quella di affermare l&#8217;importanza decisiva di un elementare rigore scientifico nell&#8217;analisi dei dati di traffico al fine di calibrare con accuratezza e non solo « a sentimento» (anche se i sentimenti sono importanti!) gli interventi SEO per i propri clienti.</p>



<p>Gli strumenti a disposizione del professionista SEO sono numerosissimi, eppure è innegabile che un senso di delusione risieda in noi. Troppe volte abbiamo a che fare con dati di apparente importanza strategica ma che risultano alla prova dei fatti fallaci, o imprecisi, puri specchietti per le allodole.</p>



<span id="more-1196"></span>



<p>Alzi la mano che non ha avvertito un senso di frustrazione usando qualsiasi &#8211; proprio qualsiasi &#8211; tool di analisi della concorrenza, per fare un esempio concreto.</p>



<p>Wittgenstein affermava che di <em>ciò di cui non possiamo parlare è necessario tacere</em>. </p>



<p>Troppe volte traiamo delle conclusioni basandoci su dati assolutamente inaffidabili. Il tranello rappresentato da grafici accattivanti, conclusioni a portata di clic, effetti speciali è sempre con noi. Il tool che ci scodella l&#8217;analisi che serve, pronta all&#8217;uso, semplicemente non esiste.</p>



<p>Troppe volte la SEO è trattata da chi la pratica non tanto come un&#8217;arte (questo sarebbe utile ed è persino necessario, per quanto non sufficiente) quanto come una sorta di armamentario di trucchi per apprendisti affabulatori, o come palestra di giochi di prestigio basati su numeri evanescenti. Sommatoria di qualche strumento per la SEO e di modelli di report buoni per tutte le evenienze. Oppure pratiche talvolta sciamanesche che si combinano in ricette miracolose.</p>



<p>Tornare alla statistica. <strong>La SEO non è ovviamente solo statistica, ma poggia sui numeri</strong>.<br>La statistica di base, per iniziare. L&#8217;ABC della statistica descrittiva. </p>



<p>Esaminare ciò che ci dicono i soli dati solidi che abbiamo, quelli che ci vengono dai nostri siti. Dati non campionari, dati non ricavati da traffici presunti sulla base di posizioni medie negli indici dei motori di ricerca, senza aggrapparsi a fantomatiche correlazioni mostrate come certe sulla base di r prossimi a 0&#8230;</p>



<p><strong>I nostri dati. Guardare a cosa ci dicono i nostri dati</strong>.</p>



<p>Talvolta, ci sembra che ragionare in termini «semplici» &#8211; mediana e cinque numeri &#8211; boxplot e istogrammi, test delle ipotesi e medie mobili, sia riduttivo. Altre volte incontro professionisti che ritengono superflua anche solo una preparazione di base statistica, ignorando il fatto che la statistica ha un pregio fondamentale, insostituibile: quello di renderci scettici, e oltremodo dubbiosi.</p>



<p><strong>Sappiamo poco, in realtà</strong>. Poco è dato capire guardando numeri generati per lo più da ciò che un algoritmo ignoto nella composizione e nel bilanciamento delle sue variabili addensa in posizioni di un indice. <strong>Quel poco, tuttavia, deve essere ragionevolmente supportato dai dati e dal buon senso</strong>.</p>



<p>Il resto è arte, appunto. Intuito, esperienza ed altro. Solo tracciando i confini tra ciò che è ragionevolmente (statisticamente) espresso dai dati in nostro possesso e ciò che la nostra esperienza suggerisce può far scaturire l&#8217;intuizione, l&#8217;esperimento dirimente. </p>



<p>Solo così, io credo,  possiamo fornire un servizio di valore.</p>



<p>La SEO è materia intrinsecamente insidiosa. Affrontarla richiede esperienza, una certa dose di coraggio e un necessario senso del limite.  </p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/un-breve-manifesto-personale-per-lattivita-seo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Fare scraping dei meta dati in Fogli Google</title>
		<link>https://www.gironi.it/blog/scraping-dei-meta-dati-google-sheet/</link>
					<comments>https://www.gironi.it/blog/scraping-dei-meta-dati-google-sheet/#comments</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Thu, 05 Oct 2017 12:58:33 +0000</pubDate>
				<category><![CDATA[seo]]></category>
		<category><![CDATA[spreadsheet]]></category>
		<guid isPermaLink="false">https://www.gironi.it/blog/?p=535</guid>

					<description><![CDATA[Fogli di Google è uno strumento semplice quanto versatile, capace di automatizzare la risoluzione di noiose operazioni di routine in maniera rapida ed efficace. Esistono soluzioni interessantissime che si integrano in Fogli come risorse aggiuntive (penso a cose come Supermetrics, o Analytics Canvas per citare due esempi notissimi). Eppure, Fogli consente di fare mille cose &#8230; <a href="https://www.gironi.it/blog/scraping-dei-meta-dati-google-sheet/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Fare scraping dei meta dati in Fogli Google"</span></a>]]></description>
										<content:encoded><![CDATA[<p>Fogli di Google è uno strumento semplice quanto versatile, capace di automatizzare la risoluzione di noiose operazioni di routine in maniera rapida ed efficace.</p>
<p>Esistono soluzioni interessantissime che si integrano in Fogli come risorse aggiuntive (penso a cose come Supermetrics, o Analytics Canvas per citare due esempi notissimi). Eppure, Fogli consente di fare mille cose già con le funzioni base.<span id="more-535"></span></p>
<p>Veniamo dunque all&#8217;esempio.<br />
Parto dall&#8217;esigenza di ricavare, data una lista di URL, il contenuto dei tags <strong>Titolo</strong>, <strong>Meta Description</strong> e <strong>Meta Keywords.<br />
</strong>Fare cioè un po&#8217; di scraping di base, come si dice nel gergo seo&#8230;</p>
<p>In Fogli la soluzione è di una semplicità disarmante.</p>
<p>Per prima cosa apro un nuovo foglio e lo chiamo come voglio.</p>
<p>Nelle celle&nbsp;<strong>A1, B1, C1, D1</strong> metto i titoli:<br />
&#8220;URL&#8221;,&#8221;Titolo&#8221;,&#8221;Descrizione&#8221;,&#8221;Meta Keywords&#8221;.</p>
<p>Ora mi posiziono in A2 e incollo la lista delle URL da analizzare.</p>
<p>In B2 ecco la formula magica :). E&#8217; proprio semplice come sembra, e funziona.</p>
<pre>=IMPORTXML (A2;"//title/text ()")
</pre>
<p>Analogamente in C2:</p>
<pre>=IMPORTXML(A2; "//meta[@name='description']/@content")
</pre>
<p>E in D2:</p>
<pre>=IMPORTXML(A2;"//meta[@name='keywords']/@content")
</pre>
<p>Ora evidenzio le celle B1,C1,D1 e vado nell&#8217;angolo in basso a destra.<br />
Mi compare il simbolo del +</p>
<p>Trascino verso il basso fino ad arrivare all&#8217;ultima riga dove è presente una URL.</p>
<p>Fatto! I campi si popoleranno in pochi secondi con i dati richiesti.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/scraping-dei-meta-dati-google-sheet/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Oddio, hanno aggiornato il pinguino&#8230;</title>
		<link>https://www.gironi.it/blog/oddio-hanno-aggiornato-il-pinguino/</link>
					<comments>https://www.gironi.it/blog/oddio-hanno-aggiornato-il-pinguino/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Thu, 07 Jun 2012 14:31:10 +0000</pubDate>
				<category><![CDATA[seo]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[penguin update]]></category>
		<guid isPermaLink="false">http://gironi.it/blog/?p=235</guid>

					<description><![CDATA[Scrivo questo post in una pausa , tra dati che si accavallano e si accartocciano e fogli excel che volano. Un altro aggiornamento dell’algoritmo di google e tutti a macinare numeri, scrutare segni, cercare di divinare il futuro come aruspici, mentre il presente rimane avvolto nelle nebbie. Gli esperti di seo assomigliano sempre più a &#8230; <a href="https://www.gironi.it/blog/oddio-hanno-aggiornato-il-pinguino/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Oddio, hanno aggiornato il pinguino&#8230;"</span></a>]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" class="alignleft size-full wp-image-307" alt="seo_sketch" src="http://gironi.it/blog/wp-content/uploads/2012/06/seo_sketch.jpg" width="128" height="128">Scrivo questo post in una pausa , tra dati che si accavallano e si accartocciano e fogli excel che volano. <strong>Un altro aggiornamento dell’algoritmo di google</strong> e tutti a macinare numeri, scrutare segni, cercare di divinare il futuro come aruspici, mentre il presente rimane avvolto nelle nebbie.</p>
<p>Gli esperti di seo assomigliano sempre più a dei trader di serie B, anche fisicamente.</p>
<p><span id="more-235"></span><br />
<!--NoAds--><br />
Ho un po’ di memoria storica.<br />
Un tempo, la maggior parte di loro assomigliava al prototipo dell’ingegnere (tipo 1) o dello smanettone brufoloso (tipo 2). Rare le donne. Oggi si vedono completi similcaliforniani, sneakers piuttosto cool acquistate in saldo su internet e persino un po’ di cravatte. Ci sono anche delle donne.</p>
<p>I meeting &nbsp;si tengono di preferenza a Londra – come quelli dei trader &#8211; e lì si parla più o meno con il gergo dei promotori finanziari (questi si chiamano seminari informali) o dei più ruspanti trader (questi li chiamano in genere parties). In entrambi i casi, il vino è piuttosto scadente.</p>
<p>Chiedo scusa per la digressione narrativa.</p>
<p>Quale differenza intercorra tra la normale ottimizzazione “a buon senso” di una pagina e le magie di chi si lancia nella più monumentale opera di ingegneria inversa dell’algoritmo di google attraverso l’analisi statistica, non saprei dire. Sospetto che la sola differenza, nei risultati, è che nel primo caso si impiega meno tempo. Però al cliente è meglio raccontare l’attività due altrimenti si perde il posto (come si fa senno’ a spiegare perché non abbiamo raggiunto l’obiettivo?).</p>
<p>L’alea &nbsp;direi che è ancora un fattore decisivo. Alea è il sinonimo elegante per culo.</p>
<p>Nulla è più noioso di sentire la milionesima storia di successo di chi impiegando le tecniche x e y ha ottenuto z. Sarei curioso di sapere quanti hanno impiegato le stesse tecniche x e y ottenendo come risultato nulla o un ban grosso come una casa, e non lo raccontano. <strong>Sospetto sia un rapporto uno a molti</strong>.</p>
<p>Invidio molto i veri vincenti, in quest’arena un po’ grottesca. Rand Fishkin ha conseguito celebrità e – spero per lui – bei guadagni non facendo il seo (nessuno saprà mai i suoi veri risultati, andando a spulciare tutti i &#8220;casi&#8221; che ha seguito), quanto &#8220;vendendosi&#8221; agli esperti di seo. Sono loro, noi, i suoi clienti, non i &#8220;veri&#8221; clienti. Quelli toccano in sorte, se va bene, a quelli che poi pagano per il vino cattivo dei parties di cui sopra.</p>
<p>E ora si procede, i dati ballano&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/oddio-hanno-aggiornato-il-pinguino/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
