6000110162 2015-08-21T13:02:36-04:00 6000171374 false Analytics 3 2015-10-30T11:00:31-04:00 1 1 2015-09-04T09:23:40-04:00 0 2 A common problem faced when displaying graphs in a cycle of weeks or months, is that peak erosion, i.e. the height of peaks can not be read off the graph. As an example, look at the following two views of the same data: Shows a peak of height 0.8 on a view scale of a few hours. Shows a peak of height 0.2 on a view scale of several days.   How is that possible? When viewing a graph on a large time scale, there are not enough pixels on the screen to display all that data at once. Hence, an aggregation function has to be applied before we view the data. Circonus uses averages to aggregate the data to a sensible resolution. This works well in most circumstances, but for judging the height of peaks, this is not a good fit. What to do about it? We offer alternative aggregation functions as overlay under: "SLA Monitoring" -> "Percentile Aggregation". Added with the default options, this will show the minimum and the maximum of all values that have to be aggregated. With this overlay, you are able to see the height of the peaks on large time scales. <p>A common problem faced when displaying graphs in a cycle of weeks or months, is that peak erosion, i.e. the height of peaks can not be read off the graph.</p> <p>As an example, look at the following two views of the same data:</p> <p></p> <ol> <li><span>Shows a peak of height 0.8 on a view scale of a few hours.</span></li> <li style="text-align: left;">Shows a peak of height 0.2 on a view scale of several days.</li> </ol> <p><br></p> <p><img src="https://s3.amazonaws.com/cdn.freshdesk.com/data/helpdesk/attachments/production/6004534705/original/blob1441372537856.png?1441372538" data-id="6004534705" style="font-size: 13px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; cursor: default; width: 443px; height: 375px;" data-height="375"></p> <p><br></p> <p><span> </span></p> <p><img src="https://s3.amazonaws.com/cdn.freshdesk.com/data/helpdesk/attachments/production/6004534639/original/blob1441372508373.png?1441372508" class="inline-image" data-id="6004534639"></p> <p><span><b>How is that possible?</b><br>When viewing a graph on a large time scale, there are not enough pixels on the screen to display all that data at once.</span></p> <p><span>Hence, an aggregation function has to be applied before we view the data.</span></p> <p>Circonus uses averages to aggregate the data to a sensible resolution.</p> <p>This works well in most circumstances, but for judging the height of peaks, this is not a good fit.</p> <p><br></p> <p><b>What to do about it?</b></p> <p>We offer alternative aggregation functions as overlay under: "SLA Monitoring" -&gt; "Percentile Aggregation".</p> <p>Added with the default options, this will show the minimum and the maximum of all values that have to be aggregated.</p> <p><br></p> <p>With this overlay, you are able to see the height of the peaks on large time scales.</p> <p><br></p> <p></p> <p><img src="https://s3.amazonaws.com/cdn.freshdesk.com/data/helpdesk/attachments/production/6004535312/original/blob1441372962886.png?1441372963" class="inline-image" data-id="6004535312"></p> <p></p> <p><br></p> <p></p> <p></p> 6000171374 120 6000056404 2015-10-23T09:49:11-04:00 6003691945 1 2 0 2 Avoid Peak Erosion using Max-aggregation 2015-09-04T16:09:43-04:00 6003691945 1 2015-09-24T17:19:21-04:00 0 0 For those who are interested learning more about the science behind some of our analytics, this paper, Time series Forecasting using Holt-Winters Exponential Smoothing (Kalekar 2004), is an excellent starting point. Unfortunately, there are a number of minor typos in the formulas for the initial conditions. If you are implementing your own Holt-Winters method, you want to consult alternative sources, e.g. Wikipedia, to find corrected versions. Abstract Many industrial time series exhibit seasonal behavior, such as demand for apparel or toys. Consequently, seasonal forecasting problems are of considerable importance. This report concentrates on the analysis of seasonal time series data using Holt-Winters exponential smoothing methods. Two models discussed here are the Multiplicative Seasonal Model and the Additive Seasonal Model. View the PDF. <div dir="ltr"> <div dir="ltr"> <div dir="ltr"> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">For those who are interested learning more about the science behind some of our analytics, this paper, Time series Forecasting using Holt-Winters Exponential Smoothing <span>(</span><span>Kalekar 2004), is an excellent starting point. Unfortunately, there are a number of minor typos in the formulas for the initial conditions. If you are implementing your own Holt-Winters method, you want to consult alternative sources, e.g. </span><a href="https://en.wikipedia.org/wiki/Exponential_smoothing" target="">Wikipedia</a>, to find corrected versions.</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;"><span><br></span></p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">Abstract</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">Many industrial time series exhibit seasonal behavior, such as demand for apparel or toys. Consequently, seasonal forecasting problems are of considerable importance. This report concentrates on the analysis of seasonal time series data using Holt-Winters exponential smoothing methods. Two models discussed here are the Multiplicative Seasonal Model and the Additive Seasonal Model.</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;"><br></p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;"><a href="http://labs.omniti.com/people/jesus/papers/holtwinters.pdf" style="color: rgb(59, 115, 185);">View the PDF.</a></p> </div> </div> </div> 6000171374 439 6000066920 2016-10-11T13:33:52-04:00 6003235491 2 2 0 0 Paper: Time series Forecasting using Holt-Winters Exponential Smoothing 2015-09-24T17:19:21-04:00 6003235491 1 2015-09-25T17:53:06-04:00 0 1 Quantiles and Inverse Quantiles Heinrich Hartmann June 27, 2014 Contents 1 Setting 2 Quantiles 3 Inverse Quantiles 4 Discussion 4.1 Scenario A 4.2 Scenario B 1 Setting Say we are running a database and want to meet the following requirement: 99.9% of all queries shall be answered within 100ms. In order to verify this requirement, we measure the response times of all queries and put them into a histogram-graph. This graph consists of a color map that indicates many queries have been answered at which durations over time. Such a diagram can reveal if the majority of queries is answered in less then 100ms, but it is not possible to check the requirement directly from the color map. The requirement concerns 0.1% of the query volume which leaves hardly any footprint in the color map. In order to check the requirement we have to add an analytics overlay. There are in fact two different overlays we can choose from: The Quantile and Inverse Quantile. 2 Quantiles We add the 99.9% quantile Q to the histograms. This will add a curve to the diagram, whose values Q(t) at a given point in time represents the smallest duration such that 99.9% of all queries at time t are answered in less then Q(t) ms. The requirement is thus translated into the condition that Q(t) ≤ 100ms, which is easy to read off the graph. 3 Inverse Quantiles Alternatively, we can add the 100ms inverse quantile R to the graph. This will also add a curve, whose value R(t) is the ratio of queries which were answered in less than 100ms. Note that the the value of R(t) is always between 0 and 1. The web interface shows this value on an independent y-axis which is suitably rescaled, depending on the values of R(t). The requirement can be translated to the condition that R(t) ≥ 0.999. 4 Discussion Let's say all queries are answered in less than 100ms. In this case, Q(t) will have some value that is smaller than 100ms. The distance between Q(t) and 100ms is an indicator of how much capacity is left before the requirement is violated. The inverse quantile R(t) will have the value 1 if all queries are below 100ms. The (very small) distance to 0.999 is another measure for the remaining capacity. But how are these capacity measures different? 4.1 Scenario A: Let's assume all queries in a given time take precisely the same time and that a problem occurs (e.g. high server load) that causes all queries to get simultaneously slower and slower. In this scenario, the quantile Q will follow the query duration and give an early indication of an approaching problem. In contrast, the inverse quantile R(t) stays at its value 1 until one (and hence all) queries take longer than 100ms, when it will drop to 0. No warning was given! The condition was directly violated heavily. We see that monitoring the quantile is essential to detect such a problem early. 4.2 Scenario B: We assume again that all our queries are initially answered in 80ms. Now a problem occurs (e.g. hdd failure, new code path) that only affects a very small number of queries and causes them to be answered in 200ms. In this case, Q(t) will stay at 80ms, since 99.9%, of all queries are still answered in 80ms. As soon as more than 0.1% of the queries are affected, the quantile jumps to 200ms without any early warning! In contrast, R(t) will be affected directly when the problem occurs and dropping down more and more as the problem affects more and more queries. We see that this time R(t) gives us an early warning. <h1>Quantiles and Inverse Quantiles</h1> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">Heinrich Hartmann June 27, 2014</p> <h2>Contents</h2> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">1 Setting</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">2 Quantiles</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">3 Inverse Quantiles</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">4 Discussion</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">4.1 Scenario A</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">4.2 Scenario B</p> <h2>1 Setting</h2> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">Say we are running a database and want to meet the following requirement: 99.9% of all queries shall be answered within 100ms.</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">In order to verify this requirement, we measure the response times of all queries and put them into a histogram-graph. This graph consists of a color map that indicates many queries have been answered at which durations over time. Such a diagram can reveal if the majority of queries is answered in less then 100ms, but it is not possible to check the requirement directly from the color map. The requirement concerns 0.1% of the query volume which leaves hardly any footprint in the color map.</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">In order to check the requirement we have to add an analytics overlay. There are in fact two different overlays we can choose from: The <code style="padding: 2px 4px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; color: rgb(221, 17, 68); border: 1px solid rgb(225, 225, 232); background-color: rgb(247, 247, 249);">Quantile</code> and <code style="padding: 2px 4px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; color: rgb(221, 17, 68); border: 1px solid rgb(225, 225, 232); background-color: rgb(247, 247, 249);">Inverse Quantile</code>.</p> <h2>2 Quantiles</h2> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">We add the 99.9% quantile Q to the histograms. This will add a curve to the diagram, whose values Q(t) at a given point in time represents the smallest duration such that 99.9% of all queries at time t are answered in less then Q(t) ms.</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">The requirement is thus translated into the condition that Q(t) ≤ 100ms, which is easy to read off the graph.</p> <h2>3 Inverse Quantiles</h2> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">Alternatively, we can add the 100ms inverse quantile R to the graph. This will also add a curve, whose value R(t) is the ratio of queries which were answered in less than 100ms. Note that the the value of R(t) is always between 0 and 1. The web interface shows this value on an independent y-axis which is suitably rescaled, depending on the values of R(t).</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">The requirement can be translated to the condition that R(t) ≥ 0.999.</p> <h2>4 Discussion </h2> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">Let's say all queries are answered in less than 100ms. In this case, Q(t) will have some value that is smaller than 100ms. The distance between Q(t) and 100ms is an indicator of how much capacity is left before the requirement is violated.</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">The inverse quantile R(t) will have the value 1 if all queries are below 100ms. The (very small) distance to 0.999 is another measure for the remaining capacity.</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">But how are these capacity measures different?</p> <h3>4.1 Scenario A:</h3> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">Let's assume all queries in a given time take precisely the same time and that a problem occurs (e.g. high server load) that causes all queries to get simultaneously slower and slower.</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">In this scenario, the quantile Q will follow the query duration and give an early indication of an approaching problem. In contrast, the inverse quantile R(t) stays at its value 1 until one (and hence all) queries take longer than 100ms, when it will drop to 0. No warning was given! The condition was directly violated heavily.</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">We see that monitoring the quantile is essential to detect such a problem early.</p> <h3>4.2 Scenario B:</h3> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">We assume again that all our queries are initially answered in 80ms. Now a problem occurs (e.g. hdd failure, new code path) that only affects a very small number of queries and causes them to be answered in 200ms. In this case, Q(t) will stay at 80ms, since 99.9%, of all queries are still answered in 80ms. As soon as more than 0.1% of the queries are affected, the quantile jumps to 200ms without any early warning!</p> <p style="margin-bottom: 10px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">In contrast, R(t) will be affected directly when the problem occurs and dropping down more and more as the problem affects more and more queries. We see that this time R(t) gives us an early warning.</p> 6000171374 118 6000067381 2015-10-30T14:06:43-04:00 6003235491 3 2 0 1 Quantiles - An Example Use case 2015-09-25T17:53:06-04:00 6003235491