Saturday 14 October 2017

Glidande Medelvärde Topp Detektering


Vi behöver ett tidigt varningssystem Jag har att göra med en server som är känd för att ha prestandafrågor under belastning Fel upptas i en databas tillsammans med en tidsstämpel Det finns några manuella åtgärdssteg som kan vidtas för att minska serverbelastningen, men endast om någon är medveten om problemet. Ge en uppsättning gånger att fel uppstod, hur kan jag identifiera början av en spik i fel i realtid Vi kan beräkna periodiskt eller vid varje felfel. Vi är oroade om tillfälliga fel, men don t Har ett specifikt tröskelvärde jag kunde bara meddela någon när vi får säga tre fel på fem minuter, men jag är säker på att det är bättre sätt. Jag gillar att kunna justera algoritmens känslighet baserat på feedback från sysadminerna För tillfället tycker de att det är ganska känsligt, även om vi vet att vi kan förvänta oss några falska positiva. Jag är inte en statistiker som jag är säker på är uppenbar och att implementera dessa behov måste vara relativt enkla med våra befintliga verktyg SQL Server R och old school ASP JScript Jag söker inte ett svar i koden, men om det kräver ytterligare programvara, har det förmodligen inte fungerat för oss, men jag välkomnar opraktiska men ideala lösningar som en kommentar, för min egen nyfikenhet. 12 på 21 44. Det har varit 5 månader sedan du ställde den här frågan och förhoppningsvis tänkte du något ut Jag kommer att göra några olika förslag här, i hopp om att du hittar något för dem i andra scenarier. För ditt användningsfall Jag tror inte att du måste titta på spikdetekteringsalgoritmer. Så här börjar Låt oss börja med en bild av de fel som uppstår på en tidslinje. Vad du vill är en numerisk indikator, ett mått på hur snabbt felen kommer och det här Åtgärd borde vara mottaglig för tröskelvärden - dina sysadminer borde kunna ställa in gränser som kontrollerar med vilka känslighetsfel till varningar. Du nämnde spikar, det enklaste sättet att få en spik är att rita ett histogram över varje 20-minutersintervall. Dina sysadminer Skulle ställa in känsligheten ba Sed på höjderna i staplarna är jag de mest felaktiga toleranserna inom ett 20-minutersintervall. Vid denna tidpunkt kanske du undrar om den 20-minuters fönsträngden inte kan justeras. Det kan, och du kan tänka på fönstlängden som att definiera ordet tillsammans i frasen som visas tillsammans. Vad är problemet med den här metoden för din Speciellt scenario Tja, din variabel är ett heltal, förmodligen mindre än 3 Du skulle inte ställa in tröskeln till 1 eftersom det bara betyder att varje fel är en varning som inte kräver en algoritm. Så kommer dina val för tröskeln att vara 2 och 3 Detta ger inte dina sysadminer en hel del finkorrigerad kontroll. Istället för att räkna fel i ett tidsfönster, hålla reda på antalet minuter mellan aktuella och sista fel. När detta värde blir för litet betyder det att dina fel är Blir för ofta och du behöver höja en varning. Din sysadmins kommer antagligen att sätta gränsen på 10 dvs om fel händer mindre än 10 minuter från varandra, är det problem eller 20 minuter Kanske 30 minuter för ett mindre missionskritiskt system. Detta mått prov Ger mer flexibilitet Till skillnad från åtgärd 1, för vilken det fanns en liten uppsättning värden som du kan arbeta med, har du nu en åtgärd som ger bra 20-30 värden. Din sysadmins kommer därför att ha mer utrymme för finjustering. Det finns en annan väg Att närma sig detta problem I stället för att titta på felfrekvenserna kan det vara möjligt att förutse felen innan de uppstår. Du nämnde att detta beteende uppstod på en enda server, vilket är känt för att ha prestandafrågor. Du kan övervaka vissa nyckelprestandindikatorer På den maskinen och få dem att berätta när ett fel kommer att hända Specifikt skulle du titta på CPU-användning, minnesanvändning och KPIs relaterade till Disk IO Om din CPU-användning överstiger 80, kommer systemet att sakta ner. Jag vet att du sa att du inte vill installera någon programvara och det är sant att du kan göra det med PerfMon Men det finns gratis verktyg där ute som gör det för dig, som Nagios och Zenoss. Och för människor som kom hit hoppas För att hitta något om spikdetektering i en tidsserie. Spetsdetektering i en tidsserie. Den enklaste sak du bör börja göra är att beräkna ett glidande medelvärde av dina inmatningsvärden. Om din serie är x1, x2, då skulle du beräkna Ett glidande medelvärde efter varje observation som. Mk 1 - alfa M alfa xk. Där alfabetet skulle bestämma hur mycket vikt som ger det senaste värdet av xk. Om ditt nya värde har flyttats för långt bort från det glidande medlet, till exempel. Då ökar du en varning. Medelvärdena är trevliga när du arbetar med realtidsdata Men anta att du redan har en massa data i ett bord, och du vill bara köra SQL-frågor mot den för att hitta spikarna. Jag skulle föreslå medelvärdet av din tidsseriepuls standardavvikelsen sigma. Isolera de värdena som är mer än 2 sigma över medelvärdet du kan behöva justera den faktorn 2.Mer roliga saker om tidsserier. Många verkliga tidsserier uppvisar cykliskt beteende Det finns en modell som heter ARIMA som hjälper dig att extrahera Dessa cykler från din tidsserie. Med medelvärden som tar hänsyn till cykliskt beteende Holt och Winters. I letade efter online-detekteringsalgoritmer och mestadels hittade akademiska artiklar som är över mitt huvud. De kan hålla svaret, men skicka inte mitt personliga enkla test Rätta mig om jag har fel, men jag tror inte att jag letar efter en toppdetekteringsalgoritm När felen har nått upp, verkar det som om jag saknat min möjlighet att förbättra det värsta problemet. Uppskattar om min användning av spik var förvirrande jag Antar att jag måste förutsäga en fortsatt ökning av fel eller identifiera ett stort steg upp dbenton 25 okt 12 kl 15 26. 1 för statistisk processkontroll finns det lite användbar information här om stegdetektion. För SPC är det inte så svårt att skriva en Implementering av antingen Western Electric Rules eller Nelson Rules. Bara skapa en USP i SQL-server som kommer att iterera via en dataset och pinga varje punkt mot reglerna med hjälp av dess grannpunkter. Summa upp antalet fel per timme beroende på dina behov . Den här typen av relaterar till en fråga jag har skrivit om Stack Overflow ett tag tillbaka har just skrivit ett snabbt svar om det hjälper statistiska processkontrollscheman i SQL Server 2008 R2. Uppdatera Den bästa algoritmen hittills är den här. Den här frågan e Xplores robusta algoritmer för detektering av plötsliga toppar i realtid timeseries data. Consider följande dataset. Matlab-format men det handlar inte om språket utan om algoritmen. Du kan tydligt se att det finns tre stora toppar och några små toppar. Denna dataset är ett specifikt exempel på klassen timeseries dataset som frågan handlar om. Denna klass av dataset har två allmänna egenskaper. Det finns grundläggande brus med en generell mean. There är stora toppar eller högre datapunkter som väsentligt avviker från bruset. Låt oss också anta följande. bredden på topparna kan inte bestämmas i förväg. toppens höjd Avviker klart från de andra värdena. Den använda algoritmen måste beräkna realtid så förändras med varje ny datapunkt. För en sådan situation måste ett gränsvärde konstrueras som utlöser signaler. Men gränsvärdet kan inte vara statiskt och måste bestämmas realtid baserat på En algoritm. Min fråga vad är en bra algoritm för att beräkna sådana tröskelvärden i realtid Finns det specifika algoritmer för sådana situationer Vilka är de mest kända algoritmerna. Rob Ust algoritmer eller användbara insikter är alla mycket uppskattade kan svara på vilket språk det handlar om algoritmen. Jag brukade göra detta för att upptäcka en abrupt förändring av ljusintensiteten på en fotosensor Jag gjorde detta genom att flytta genomsnittet och ignorera alla datapunkter som är större än ett tröskelvärde Observera att detta tröskelvärde skiljer sig från tröskeln som bestämmer en topp Så säg att du bara innehåller datapunkter som ligger inom en stddev till ditt glidande medelvärde och betrakta de datapoängen med mer än tre stddev som toppar Denna algoritm gjorde det mycket bra för vårt sammanhang av ansökan den tiden justhalf 28 mar kl 14 på 7 54.Ah ser jag att jag inte väntade det i kodformuläret Om jag hade sett denna fråga tidigare förmodligen skulle du få svaret mycket snabbare D Hur som helst, min ansökan den tiden var att upptäcka om fotosensorn är hindrad från omgivande ljuskälla, det är därför vi behöver det glidande medlet eftersom den omgivande ljuskällan kan förändras gradvis över tiden. Vi skapade detta som ett spel där y ou ska sväva din hand över sensorerna efter specifika mönster D justhalf mar 28 14 på 10 05.Smoothed z-score algo mycket robust tröskelalgoritm. Jag har byggt en algoritm som fungerar mycket bra för dessa datasatser. Det bygger på principen av dispersion om en ny datapunkt är ett givet x antal standardavvikelser bort från något rörligt medelvärde, algoritmsignalerna kallas också z-poäng Algoritmen är mycket robust eftersom den konstruerar ett separat rörligt medelvärde och avvikelse, så att signaler inte korrumperar Tröskelvärdet Framtidssignaler identifieras därför med ungefär samma noggrannhet oberoende av mängden tidigare signaler. Algoritmen tar 3 ingångar fördröjer lagret av det rörliga fönstrets tröskel, den z-poäng vid vilken algoritmen signalerar och påverkar påverkan mellan 0 och 1 av nya signaler om medel - och standardavvikelsen Till exempel kommer en lagring av 5 att använda de sista 5 observationerna för att jämföra data. Ett tröskelvärde på 3 5 kommer att signalera om en datapoi nt är 3 5 standardavvikelser från det rörliga medelvärdet och ett inflytande av 0 5 ger signaler hälften av inflytandet som normala datapunkter har. På samma sätt negativt påverkar 0 signaler helt för att beräkna det nya tröskelvärdet. En påverkan av 0 är därför den mest robusta Alternativ 1 är minst. Det fungerar som följer. Matlab-koden för den här demoen finns i slutet av detta svar För att använda demo, kör det enkelt och skapa en tidsserie själv genom att klicka på det övre diagrammet. Algoritmen börjar fungera. efter att ha ritat fördröjt antal observationer. Bilaga 1 Matlab och R-kod för algoritmen. Denna kod båda talen kommer att ge följande resultat för uppgifterna i den ursprungliga frågan. Implementeringar på andra språk. Golang Xeoncross. Appendix 2 Matlab demonstrationskod klicka för att göra data. Koden ovan har skrivits så att den omberäknar hela algoritmen varje gång. Naturligtvis kan man också ändra koden något så att den filtreradeY avgFilter och stdFilter är sa Ved och värdena uppdateras helt enkelt när ny information kommer fram det kommer också att göra algoritmen mycket snabbare. För demonstrationen bestämde jag mig för att sätta hela koden ihop i en enda funktion. Om du använder den här funktionen någonstans, tacka mig eller det här svaret Om du har några frågor angående denna algoritm, posta dem i kommentarerna nedan eller kontakta mig på LinkedIn. answered Mar 25 14 på 16 16. En metod är att upptäcka toppar baserat på följande observation. Tid t är en topp om du t-1 ytyt 1.Du undviker falska positiva genom att vänta tills upptrenden är över Det är inte exakt realtid i den meningen att det kommer att sakna toppen med en dt känslighet kan kontrolleras genom att kräva en marginal för jämförelse Det finns en handel Av mellan bullriga upptäckt och tidsfördröjning av detektering Du kan berika modellen genom att lägga till fler parametrar. Där dt och m är parametrar för att styra känsligheten mot tidsfördröjning. Detta är vad du får med den nämnda algoritmen. Där är koden att reproducera t han plottar i python. By inställningen m 0 5 kan du få en renare signal med endast en falsk positiv. I signalbehandling görs toppdetektering ofta via wavelettransformation. Du gör i princip en diskret wavelet-transformation på dina tidsseriedata Zero-crossings i de detaljkoefficienter som returneras kommer att motsvara toppar i tidsseriensignalen. Du får olika toppamplituder som detekteras vid olika detaljkoefficientnivåer, vilket ger dig flera nivåer upplösning. svarad 31 mars kl 20 vid 20 54. Om gränsvärdet eller andra kriterier beror på framtida värden, då är den enda lösningen utan tidsmaskin eller annan kunskap om framtida värden att fördröja något beslut tills en har tillräckliga framtida värden. Om du vill ha en nivå över ett medelvärde som exempelvis spänner över 20 poäng, då du måste vänta tills du har minst 19 poäng före ett toppbeslut, annars kan nästa nya punkt helt kasta bort ditt tröskelvärde 19 poäng sedan. Din nuvarande tomt har inga toppar om du inte på något sätt vet på förhand att den allra närmaste punkten inte är 1e99, som efter att ha omkalkat din plot s Y-dimension, skulle vara platt fram till den punkten. svarade den 24 mars 14 på 1 57. Tänk på att ha en signal i tidsdomänen och du vill ha För att släta signalen Flytta genomsnittliga och gaussiska filter som används. Hur väljer du vilken som används för vad. Vilka är de förhållanden under vilka Gaussian är bättre och förhållanden under vilket glidande medelvärde är bättre. Vad jag försöker göra med denna signal är , toppavkänning initialt och sedan tillämpa små fönster på alla delar och ta reda på frekvensändringar Doppler-skift för varje del för att räkna ut rörelseriktningen från frekvensändringen Jag vill utjämna signalen i tidsdomänen utan att informationen förloras frekvensdomänen som jag trodde för att utse Doppler-skiften, med hjälp av STFT skulle vara en bra referens kunde ges till några papper, det skulle också vara väldigt användbart. Skannade 29 sep 16 kl 11 12.

No comments:

Post a Comment