Wednesday 1 November 2017

Flytting Gjennomsnitt Ren Data


Introduksjon til ARIMA nonseasonal modeller. ARIMA p, d, q prognose ligning ARIMA modeller er i teorien den mest generelle klassen av modeller for å prognose en tidsserie som kan gjøres for å være stasjonær ved differensiering om nødvendig, kanskje sammen med ikke-lineære transformasjoner for eksempel logging eller deflating hvis nødvendig En tilfeldig variabel som er en tidsserie er stasjonær hvis dens statistiske egenskaper er konstant over tid En stasjonær serie har ingen trend, dens variasjoner rundt sin gjennomsnitt har en konstant amplitude og den vri på en konsistent måte dvs. at kortsiktige tilfeldige tidsmønstre alltid ser like ut i statistisk forstand. Den sistnevnte tilstanden betyr at dets autokorrelasjonskorrelasjoner med sine egne tidligere avvik fra middelværdien forblir konstant over tid, eller tilsvarende at dets strømspektrum forblir konstant over tid En tilfeldig variabel i dette skjemaet kan sees som vanlig som en kombinasjon av signal og støy, og signalet hvis det er tydelig kan være en patt ern med rask eller langsom gjennomsnittlig reversering eller sinusformet svingning eller rask veksling i tegn, og det kan også ha en sesongkomponent. En ARIMA-modell kan sees som et filter som forsøker å skille signalet fra støyen, og signalet er da ekstrapolert inn i fremtiden for å oppnå prognoser. ARIMA-prognose-ligningen for en stasjonær tidsserie er en lineær ie-regresjonstypekvasjon der prediktorene består av lag av den avhengige variabelen og eller lagrer prognosefeilene som er. Forutsatt verdi av Y en konstant og eller vektet sum av en eller flere nylige verdier av Y og eller en vektet sum av en eller flere nylige verdier av feilene. Hvis prediktorene bare består av forsinkede verdier av Y, er det en ren autoregressiv selvregressert modell, som bare er et spesielt tilfelle av en regresjonsmodell, og som kan forsynes med standard regresjonsprogramvare. For eksempel er en første-ordens autoregressiv AR 1-modell for Y en enkel regresjonsmodell der den uavhengige variabelen i s bare Y forsinket med en periode LAG Y, 1 i Statgraphics eller YLAG1 i RegressIt Hvis noen av prediktorene lags av feilene, er en ARIMA-modell det IKKE en lineær regresjonsmodell, fordi det ikke er mulig å spesifisere siste periode s feil Som en uavhengig variabel må feilene beregnes fra tid til annen når modellen er montert på dataene. Fra et teknisk synspunkt er problemet med å bruke forsinkede feil som prediktorer at modellens spådommer ikke er lineære funksjoner av koeffisienter, selv om de er lineære funksjoner i fortidens data. Således skal koeffisienter i ARIMA-modeller som inneholder forsinkede feil estimeres ved ikke-lineære optimaliseringsmetoder bakkeklatring i stedet for bare å løse et system av ligninger. Akronym ARIMA står for automatisk regressiv integrert Flytte gjennomsnittlig Lags av den stationære serien i prognosen ligningen kalles autoregressive vilkår, lags av prognosen feilene kalles glidende gjennomsnittlige vilkår og en tidsserie som trenger å bli differensiert for å bli gjort stasjonær, sies å være en integrert versjon av en stasjonær serie Tilfeldige gange og tilfeldige trendmodeller, autoregressive modeller og eksponentielle utjevningsmodeller er alle spesielle tilfeller av ARIMA-modeller. En ikke-sasonlig ARIMA-modell er klassifisert som en ARIMA p, d, q modell, hvor. p er antall autoregressive termer. d er antall ikke-soneforskjeller som trengs for stasjonar, og. q er antall forsinkede prognosefeil i prediksjonsligningen. Forutsigelsesligningen er konstruert som følger Først, la y betegne den forskjellen på Y som betyr. Merk at den andre forskjellen på Y d2-saken ikke er forskjellen fra 2 perioder siden. Det er først den forskjell som er den første forskjellen som er den diskrete analogen til et andre derivat, det vil si den lokale akselerasjonen av serien i stedet for den lokale trenden. Med hensyn til y er den generelle prognosekvasjonen her. De bevegelige gjennomsnittsparametrene s er definert slik at deres tegn er negative i ekv. Uasjon, etter konvensjonen som ble innført av Box og Jenkins. Noen forfattere og programvare, inkludert R-programmeringsspråket, definerer dem slik at de har pluss tegn i stedet. Når faktiske tall er plugget i ligningen, er det ingen tvetydighet, men det er viktig å vite hvilken konvensjon programvaren din bruker når du leser utdata Ofte er parameterne angitt der med AR 1, AR 2, og MA 1, MA 2 osv. For å identifisere riktig ARIMA-modell for Y begynner du ved å bestemme rekkefølgen av differensiering d som trenger å stasjonærisere serien og fjerne bruttoegenskapene til sesongmessigheten, kanskje i forbindelse med en variansstabiliserende transformasjon som logging eller deflating Hvis du stopper på dette punktet og forutser at differensierte serier er konstante, har du bare montert en tilfeldig tur eller tilfeldig Trendsmodell Den stasjonære serien kan imidlertid fortsatt ha autokorrelerte feil, noe som tyder på at noen AR-vilkår p 1 og eller noen nummer MA-termer q 1 også trengs i prognosekvasjonen. Prosessen med å bestemme verdiene p, d og q som er best for en gitt tidsserie, vil bli diskutert i senere avsnitt i notatene hvis koblinger er øverst på denne siden, men en forhåndsvisning av noen av de typer ikke-sasonlige ARIMA-modellene som ofte oppstår, er gitt nedenfor. ARIMA 1,0,0 førsteordens autoregressive modell hvis serien er stasjonær og autokorrelert, kanskje den kan forutsies som et flertall av sin egen tidligere verdi, pluss en konstant Forutsigelsesligningen i dette tilfellet er. som er Y regressert i seg selv forsinket av en periode Dette er en ARIMA 1,0,0 konstant modell Hvis gjennomsnittet av Y er null, vil ikke det konstante begrepet bli inkludert. Hvis skråningen er koeffisient 1 er positiv og mindre enn 1 i størrelsesorden skal den være mindre enn 1 i størrelsesorden hvis Y er stasjonær, beskriver modellen gjennomsnittsreferanseadferd, der neste periode s-verdi skal anslås å være 1 ganger så langt unna gjennomsnittlig som denne perioden s verdi Hvis 1 er negativ, det forutser gjennombruddsadferd med skifting av tegn, dvs. det forutsier også at Y vil være under gjennomsnittlig neste periode hvis den er over gjennomsnittet i denne perioden. I en andre-ordens autoregressiv modell ARIMA 2,0,0 ville det være en Y t-2 termen til høyre også, og så videre. Avhengig av tegn og størrelser av koeffisientene, kunne en ARIMA 2,0,0 modell beskrive et system hvis gjennomsnitts reversering foregår i sinusformet oscillerende mote, som bevegelsen av en masse på en fjær som er utsatt for tilfeldige støt. ARIMA 0,1,0 tilfeldig tur Hvis serien Y ikke er stasjonær, er den enkleste mulige modellen for en tilfeldig turmodell, som kan betraktes som et begrensende tilfelle av en AR 1-modell hvor den autoregressive koeffisienten er lik 1, dvs. en serie med uendelig sakte, gjennomsnittlig reversering. Forutsigelsesligningen for denne modellen kan skrives som. hvor konstant sikt er den gjennomsnittlige perioden til periode-endringen, dvs. langsiktig Drift i Y Denne modellen kan monteres som en ikke-avskjæringsrekkefølge gryningsmodell hvor den første forskjellen i Y er den avhengige variabelen Siden den bare inneholder en ikke-soneforskjell og en konstant periode, er den klassifisert som en ARIMA 0,1,0-modell med konstant. Den tilfeldige-walk-uten-drift-modellen ville være en ARIMA 0,1,0-modell uten konstant. ARIMA 1,1,0 differensiert førsteordens autoregressiv modell Hvis feilene i en tilfeldig turmodell er autokorrelert, kan problemet løses ved å legge til et lag av den avhengige variabelen til prediksjonsligning - dvs. ved å regresse den første forskjellen på Y i seg selv forsinket av en periode. Dette ville gi følgende prediksjonsligning. Det kan omorganiseres til. Dette er en førsteordens autoregressiv modell med en rekkefølge av ikke-soneforskjeller og en konstant term - en ARIMA 1,1,0 modell. ARIMA 0,1,1 uten konstant enkel eksponensiell utjevning En annen strategi for å korrigere autokorrelerte feil i en tilfeldig gangmodell er foreslått av den enkle eksponensielle utjevningsmodellen. Husk at for noen ikke-stationære tidsserier, for eksempel de som har støyende fluktuasjoner rundt et sakte varierende middel, utfører ikke den tilfeldige turmodellen så vel som et glidende gjennomsnitt av tidligere verdier. Med andre ord, i stedet for å ta den nyeste observasjonen som prognosen for neste observasjon , er det bedre å bruke et gjennomsnitt av de siste observasjonene for å filtrere ut støy og mer nøyaktig estimere det lokale gjennomsnittet. Den enkle eksponensielle utjevningsmodellen bruker et eksponentielt vektet glidende gjennomsnitt av tidligere verdier for å oppnå denne effekten. Forutsigelsesligningen for Enkel eksponensiell utjevningsmodell kan skrives i en rekke matematisk ekvivalente former, hvorav en er den såkalte feilkorreksjonsformen, der den forrige prognosen er justert i retning av feilen som den gjorde. Fordi e t-1 Y t - 1 - t-1 per definisjon, dette kan omskrives som. som er en ARIMA 0,1,1-uten konstant prognosekvasjon med 1 1 - Dette betyr at du kan passe en enkel eksponentiell smoo ting ved å spesifisere det som en ARIMA 0,1,1 modell uten konstant, og den estimerte MA 1-koeffisienten tilsvarer 1-minus-alfa i SES-formelen. Husk at i SES-modellen er gjennomsnittsalderen for dataene i 1- Forutgående prognoser er 1, noe som betyr at de vil ha en tendens til å ligge bak trender eller vendepunkter med ca. 1 perioder. Det følger at gjennomsnittsalderen for dataene i de 1-årige prognosene for en ARIMA 0,1,1-uten - konstant modell er 1 1 - 1 For eksempel hvis 1 0 8 er gjennomsnittsalderen 5 Når 1 nærmer seg 1, blir ARIMA 0,1,1-uten-konstant modell et veldig langsiktig glidende gjennomsnitt, og som 1 nærmer seg 0 blir det en tilfeldig walk-without-drift-modell. Hva er den beste måten å korrigere for autokorrelasjon, legge til AR-vilkår eller legge til MA-termer I de to foregående modeller diskutert problemet med autokorrelerte feil i en tilfeldig walk-modell ble løst på to forskjellige måter ved å legge til en forsinket verdi av differensierte serier til ligningen eller legge til en forsinket verdi av forecaen st feil Hvilken tilnærming er best En tommelfingerregel for denne situasjonen, som vil bli nærmere omtalt senere, er at positiv autokorrelasjon vanligvis behandles best ved å legge til et AR-uttrykk for modellen, og negativ autokorrelasjon behandles vanligvis best av legge til en MA-term I forretnings - og økonomiske tidsserier oppstår negativ autokorrelasjon ofte som en artefakt av differensiering. Generelt reduserer differensiering positiv autokorrelasjon og kan til og med forårsake en bytte fra positiv til negativ autokorrelasjon. Så, ARIMA 0,1,1-modellen, i hvilke differensier er ledsaget av en MA-term, brukes hyppigere enn en ARIMA 1,1,0-modell. ARIMA 0,1,1 med konstant enkel eksponensiell utjevning med vekst Ved å implementere SES-modellen som en ARIMA-modell, får du faktisk noen fleksibilitet Først og fremst kan den estimerte MA 1-koeffisienten være negativ, dette tilsvarer en utjevningsfaktor som er større enn 1 i en SES-modell, som vanligvis ikke er tillatt i SES-modellprosedyren Sec ond, du har muligheten til å inkludere en konstant periode i ARIMA-modellen hvis du ønsker det, for å estimere en gjennomsnittlig ikke-null trend. ARIMA 0,1,1-modellen med konstant har prediksjonsligningen. En-tiden fremover prognosene fra denne modellen er kvalitativt lik SES-modellen, bortsett fra at bane av de langsiktige prognosene typisk er en skrånende linje hvis skråning er lik mu i stedet for en horisontal linje. ARIMA 0,2,1 eller 0, 2,2 uten konstant lineær eksponensiell utjevning Linjære eksponentielle utjevningsmodeller er ARIMA-modeller som bruker to ikke-sekundære forskjeller i sammenheng med MA-termer. Den andre forskjellen i en serie Y er ikke bare forskjellen mellom Y og seg selv forsinket med to perioder, men heller er det den første forskjellen i den første forskjellen - Y-endringen av Y ved periode t Således er den andre forskjellen på Y ved periode t lik Y t-Y t-1 - Y t-1 - Y T-2 Y t - 2Y t-1 Y t-2 En annen forskjell på en diskret funksjon er analog s til et andre derivat av en kontinuerlig funksjon, måles akselerasjonen eller krumningen i funksjonen på et gitt tidspunkt. ARIMA 0,2,2-modellen uten konstant forutser at den andre forskjellen i serien er lik en lineær funksjon av den siste to prognosefeil. som kan omarrangeres som. hvor 1 og 2 er MA 1 og MA 2-koeffisientene Dette er en generell lineær eksponensiell utjevningsmodell som i det vesentlige er den samme som Holt s-modellen, og Brown s-modellen er et spesielt tilfelle. Det bruker eksponentielt vektet Flytte gjennomsnitt for å anslå både et lokalt nivå og en lokal trend i serien. De langsiktige prognosene fra denne modellen konvergerer til en rett linje hvis skråning avhenger av den gjennomsnittlige trenden observert mot slutten av serien. ARIMA 1,1,2 uten konstant fuktet trend lineær eksponensiell utjevning. Denne modellen er illustrert i de tilhørende lysbildene på ARIMA-modeller. Det ekstrapolerer den lokale trenden i slutten av serien, men flater ut på lengre prognoshorisont for å introdusere en Conservatism, en praksis som har empirisk støtte. Se artikkelen om Hvorfor Damped Trend fungerer av Gardner og McKenzie og Golden Rule-artikkelen av Armstrong et al for detaljer. Det er generelt tilrådelig å holde fast i modeller der minst en av p og q er ikke større enn 1, dvs. ikke prøv å passe på en modell som ARIMA 2,1,2, da dette sannsynligvis vil føre til overfitting og fellesfaktorproblemer som diskuteres mer detaljert i notatene på matematisk struktur av ARIMA modeller. Spreadsheet implementering ARIMA modeller som de som er beskrevet ovenfor er enkle å implementere på et regneark. Prediksjonsligningen er bare en lineær ligning som refererer til tidligere verdier av originale tidsserier og tidligere verdier av feilene. Dermed kan du sette opp et ARIMA prognose regneark ved å lagre dataene i kolonne A, prognoseformelen i kolonne B og feildataene minus prognosene i kolonne C Forutsigelsesformelen i en typisk celle i kolonne B ville rett og slett være en lineær ekspresjon n refererer til verdier i forrige rader med kolonne A og C, multiplisert med de relevante AR - eller MA-koeffisientene lagret i celler andre steder på regnearket. Jeg spiller litt igjen i Python, og jeg fant en fin bok med eksempler. Et av eksemplene er å plotte noen data Jeg har en fil med to kolonner, og jeg har dataene jeg plottet dataene fint, men i øvelsen står det Endre programmet ditt videre for å beregne og plotte løpende gjennomsnitt av dataene, definert av hvor r 5 i dette tilfellet og yk er den andre kolonnen i datafilen. Har programmet plottet både de opprinnelige dataene og det løpende gjennomsnittet på samme graf. Så langt har jeg dette. Så hvordan beregner jeg summen I Mathematica er det enkelt siden det er symbolsk manipulasjon Sum jeg, for eksempel, men hvordan å beregne summen i python som tar hver tiende poeng i dataene og gjennomsnitt det, og gjør det til slutten av poengene. Jeg så på boken, men fant ingenting som ville forklar dette. heltonbiker s kode gjorde kunsten D. Thank yo du veldig mye. Det er et problem med det aksepterte svaret Jeg tror vi må bruke gyldige i stedet for det samme her - returnere vinduet, samme. Som et eksempel, prøv MA av dette datasettet 1,5,7,2,6 , 7,8,2,2,7,8,3,7,3,7,3,15,6 - resultatet skal være 4 2,5 4,6 0,5 0,5 0,5 2,5 4,4 4,5 4,5 6,5 6,4 6,7 0,6 8 men å ha samme gir oss en feil utgang på 2 6,3 0,4 2,5 4,6 0,5 0,5 0,5 2,5 4,4 4,5 4,5 6,5 6, 4 6,7 0,6 8,6 2,4 8.Rusty kode for å prøve dette ut. Prøv dette med gyldig samme og se om matematikken er fornuftig. ansvaret 29. oktober 14 på 4 27.Haven t prøvde dette ut, men jeg skal se på det, Det har vært en stund siden jeg har kodet i Python dingod 29. oktober klokken 7 07. dingod Hvorfor ikke du Hurtig prøve dette ut med den rustne koden og utvalgsdatasettet som en enkel liste, postet jeg. For noen dovne folk som jeg hadde vært i starten - det maskerer ut det faktum at glidende gjennomsnitt er at du bør vurdere å redigere ditt opprinnelige svar jeg prøvde det bare i går og dobbel sjekket lagret meg fra å se dårlig på å rapportere til Cxo l evel Alt du trenger å gjøre er å prøve det samme bevegelige gjennomsnittet en gang med gyldig og annen gang med det samme - og når du er overbevist om å gi meg litt kjærlighet, kjør oppstemme ekta 29 oktober 14 kl 7 16. Jeg vet at dette er en gammelt spørsmål, men her er en løsning som ikke bruker noen ekstra datastrukturer eller biblioteker. Det er lineært i antall elementer i inngangslisten, og jeg kan ikke tenke på noen annen måte å gjøre det mer effektivt, faktisk hvis noen vet om en bedre måten å tildele resultatet, vennligst gi meg beskjed. IKKE dette ville være mye raskere ved hjelp av en numpy array i stedet for en liste, men jeg ønsket å eliminere alle avhengigheter. Det ville også være mulig å forbedre ytelsen ved multi-threaded execution. Funksjonen forutsetter at inngangslisten er endimensjonal, så vær forsiktig. UPD Mer effektive løsninger har blitt foreslått av Alleo og jasaarim. Du kan bruke for det. Modusargumentet angir hvordan du kan håndtere kantene jeg valgte den gyldige modusen her fordi jeg tror at s hvordan de fleste forventer å kjøre, betyr å jobbe, men du kan ha andre prioriteter Her er et diagram som illustrerer forskjellen mellom modene. Ansatt Mar 24 14 på 22 01. Jeg liker denne løsningen fordi den er ren en linje og relativt effektivt arbeid gjort i numpy Men Alleo s Effektiv løsning ved hjelp av har bedre kompleksitet Ulrich Stern Sep 25 15 på 0 31. Du kan beregne en løpende gjennomsnitt med. Fortunately, numpy inneholder en convolve-funksjon som vi kan bruke for å øke hastigheten. Det løpende gjennomsnittet er ekvivalent med å samle x med en vektor som er N lang, med alle medlemmer lik 1 N Den numpy implementeringen av convolve inkluderer startovergangeren, så du må fjerne de første N-1 poengene. På min maskin er den raske versjonen 20-30 ganger raskere, avhengig av lengden på inngangen vektor og størrelse på gjennomsnittsvinduet. Merk som convolve innebærer en samme modus som virker som om den skulle adressere det startende forbigående problemet, men det splitter det mellom begynnelsen og slutten. Den fjerner forbigående fra slutten, og begynnelsen Jeg har ikke en Vel, jeg antar at det er saken om prioriteringer, jeg trenger ikke samme antall resultater på bekostning av å få en skråning mot null som ikke er der i dataene, her er en kommando for å vise forskjellen mellom modusmodusene fulle, samme, gyldige tomt sammenfaller dem 200,, de 50, 50, modus m for m i moduser akse -10, 251, - 1, 1 1 legemodus, lok lavere senter med pyplot og numpy importert lapis Mar 24 14 på 13 56.pandas er mer egnet for dette enn NumPy eller SciPy. Funksjonen rollingmean gjør jobben beleilig. Den returnerer også et NumPy array når inngangen er en array. Det er vanskelig å slå rollingmean i ytelse med enhver tilpasset ren Python implementering Her er et eksempel på ytelse mot to av de foreslåtte løsningene. Det er også gode alternativer for hvordan man skal håndtere kanten verdier. Jeg er alltid irritert av signalbehandling funksjon som returnerer utgangssignaler av forskjellig form enn inngangssignaler når både innganger og utgangene er av samme na turen, for eksempel begge tidsmessige signaler. Det bryter korrespondansen med relatert uavhengig variabel, for eksempel tid, frekvens som gjør plotting eller sammenligning ikke en direkte sak uansett. Hvis du deler følelsen, vil du kanskje endre de siste linjene i den foreslåtte funksjonen som samme returvindu -1 - windowlen-1 Christian O Reilly Aug 25 15 på 19 56. Litt sent til festen, men jeg har laget min egen lille funksjon som ikke vikler rundt endene eller pads med nuller som deretter brukes til å finne gjennomsnittet så vel som en videre behandling er at den også prøver å samplere signalet på lineært avstandspunkter. Tilpass koden på vilkårlig måte for å få andre funksjoner. Metoden er en enkel matriksmultiplikasjon med en normalisert gausskjerne. En enkel bruk på et sinusformet signal med ekstra normal distribuert støy. Dette spørsmålet er nå enda eldre enn da NeXuS skrev om det i forrige måned, MEN jeg liker hvordan koden hans håndterer kantsaker. Men fordi det er et enkelt bevegelig gjennomsnittsnivå, ligger det etter resultatene de Jeg søker på at jeg trodde at det handlet om kantsaker på en mer tilfredsstillende måte enn NumPy s-modi som var gyldige samme og fulle, kunne oppnås ved å bruke en lignende tilnærming til en konvoluttbasert metode. Mitt bidrag bruker et sentralt løpende gjennomsnitt for å justere resultatene med deres data Når det er to få poeng tilgjengelig for vinduet i full størrelse som skal brukes, beregnes løpende gjennomsnitt fra suksessivt mindre vinduer ved kantene av arrayet Egentlig fra suksessivt større vinduer, men det er en implementerings detalj. Det er relativt sakte fordi det bruker convolve og kan sannsynligvis bli spruced opp ganske mye av en ekte Pythonista, men jeg tror at ideen står. Ansatt Jan 2 på 0 28. Det er hyggelig, men sakte når vinduets bredde blir stor. Noen svar gir mer effektive algoritmer med men synes ikke å håndtere kanten verdier har jeg selv implementert en algoritme som kan håndtere dette problemet godt, hvis dette problemet er erklært som. Input parameter mergenum kan betraktes som 2 windowwi dth 1. Jeg vet at denne koden er litt ulæselig hvis du finner det nyttig og vil ha noen utvidelser, vennligst gi meg beskjed, og jeg vil oppdatere dette svaret Siden skriving kan en forklaring koste meg mye tid, jeg håper jeg gjør det bare når noen trenger det, vennligst tilgi meg for min latskap. Hvis du bare er interessert i den opprinnelige versjonen. Det er enda mer uleselig, den første løsningen blir kvitt problem ved å putte nuller rundt arrayet, men den andre løsningen som er lagt ut her, håndterer den i en tøff og direkte måte. I min siste setning forsøkte jeg å indikere hvorfor det hjelper flytende punktfeil Hvis to verdier er omtrent samme størrelsesorden, legger de mindre presisjon enn ved å legge til et veldig stort tall til en veldig liten Koden kombinerer tilstøtende verdier på en slik måte at selv mellomliggende beløp alltid skal være rimelig tett i størrelsesorden, for å minimere flytpunktsfeilen. Ingenting er dumt bevis, men denne metoden har lagret et par svært dårlig implementerte prosjekter i produksjon Mayur Patel Des 15 14 på 17 22. Alleo I stedet for å gjøre ett tillegg per verdi, vil du gjøre to. Beviset er det samme som bit-flipping problemet. Poenget med dette svaret er imidlertid ikke nødvendigvis ytelse, men presisjon Minnebruk for gjennomsnittlig 64-biters verdier vil ikke overstige 64 elementer i hurtigbufferen, så det er vennlig i minnebruk, og Mayur Patel Des 29 14 på 17 04.

No comments:

Post a Comment