Risk, statistics and models
On this page
Averages and medians
One-year returns of 2%, 3%, 4%, 5% and 200%.
Average: (2 + 3 + 4 + 5 + 200) ÷ 5 = 42.8%. Median: the middle value, 4%.
Four of the five returns are between 2% and 5%. The average describes none of them; the median describes the typical one.
Market figures on ScripLens use medians for this reason: the screener's "median of matches vs market", the median multiple in the past value summary, and the median 1-year return in the market pulse. Where an average is shown, it is labelled as such.
Percentiles, spread and histograms
P/E ratios of 8, 10, 12, 15 and 20. For the company at 12, two others are lower and four others are in the group.
Percentile = 2 ÷ 4 × 100 = 50%. Rank: 3rd of 5, counting the highest value as rank 1.
On the stock page, "Higher than X%" is this percentile. A high percentile means a high value, and it is never presented as better or worse. The same direction applies to every metric, so a high debt-to-equity and a high ROE both place the company high on its chart.
The spread is the range that holds the middle 80% of values, from the 10th to the 90th percentile (P10 to P90). The past value page uses it to say, for example, that one in ten holdings ended below one value and one in ten above another. Between two sorted values, a percentile is found by linear interpolation: with ten values, P10 sits 90% of the way from the 1st value to the 2nd.
A histogram counts how many values fall in each range. The screener's filter cards draw one for each condition across the whole market, clipped to the 2nd to 98th percentile so that a few extreme values do not flatten the chart. The past value page groups outcomes into ranges such as "Halved or worse", "Fell", "Up to +50%" and "Over 10x", and it counts every company in the filtered list.
Volatility
volatility = sample standard deviation of r(t) × √252 × 100
Suppose the daily standard deviation is 1.5%. Over 252 trading days in a year: 1.5% × √252 = 1.5% × 15.9 = 23.8% a year.
A higher volatility means larger typical swings in either direction. It does not mean the price will fall, and a low figure does not mean the price is safe. Volatility is calculated from past returns and assumes the future will look like the window it was measured on, which it may not.
The stock page's risk section uses the last 252 trading days. The Compare page uses daily returns over the period you choose. The stock-vs-index section uses weekly returns, so its volatility is a different number.
Beta and correlation
correlation = cov(stock returns, index returns) ÷ (sd of stock returns × sd of index returns)
In a sample, the stock tends to move 1.2% for every 1% the index moves: beta 1.2.
Correlation 0.8 means the two often move in the same direction, but not always. Correlation 0 means no relationship in that sample.
The Compare page calculates beta and correlation from daily returns over your chosen period. The stock-vs-index section uses weekly returns. The two can differ, so check which window a figure uses.
Beta is estimated from one sample of past data. It describes how the stock behaved against the index in that period, and it can change when the company or the market changes.
Up and down capture
In months when the index rose, the stock averaged +3.3% and the index averaged +3.0%: 3.3 ÷ 3.0 × 100 = 110%.
In months when the index fell, the stock fell 8% and the index fell 10% on average: down capture 80%.
A capture figure above 100% in up months means the stock rose more than the index on average in those months. Below 100% in down months means it fell less. These are averages over a short list of months, and at least three months are needed.
Calendar returns and seasonality
Calendar-year returns run from the last close of the previous year to the last close of each year. The current year is marked as partial. The monthly heatmap shows each month's return, and the seasonality row averages each calendar month across the complete years, with a count of how many years it rose.
A label such as "most consistent month" means that month rose in the most years. It does not show that the month will behave the same way next year. With ten years of data, each month has ten observations, and a month can rise in eight of them by chance.
Base effects
A price going from ₹50 to ₹100 is a rise of 100%. Going back from ₹100 to ₹50 is a fall of 50%.
Losing half and then gaining 100% returns you to where you started, which is why a fall needs a bigger rise to recover.
Growth from a very small base can look enormous. Profit rising from ₹1 crore to ₹5 crore is growth of 400%, even though it is a small amount in absolute terms. This is why ScripLens leaves growth blank when the earlier year is negative, and why percentage-point changes (for example, promoter holding) are labelled as points.
Survivorship and look-ahead bias
Survivorship bias: suppose 100 companies were listed in 2010 and 20 were later delisted or merged away. A list of today's companies contains only the 80 survivors. Their combined history looks better than the full group's. The past value explorer covers only companies listed today, and says so on the page.
Look-ahead bias: judging a 2022 decision with a financial result published in 2026 uses information that did not exist in 2022. The valuation history avoids this by counting each filing only from its public date (45 days after a quarter ends, and 60 days after a financial year ends). When you look at an old chart, ask what was known on that date.
Sample size
Five years of monthly data gives five observations for each calendar month. A month that rose in all five years looks consistent, but a coin flipped five times lands heads every time about 3% of the time. A figure based on 500 observations deserves more weight than one based on 5.
Check the count next to any statistic. The site shows counts where they matter, such as "up in 4 of 5 years" or "stocks with this figure".
Why past performance is not a forecast
Every statistic on ScripLens is a description of a stretch of history. A high past return, a low volatility or a strong season can all change. No figure on the site is a projection or a target, and no past return is a promise.
Piotroski F-score
Joseph Piotroski proposed the score in 2000, testing it on US companies with high book-to-market ratios. Each test compares this year with last year, so the score needs two years of annual data. ScripLens counts the tests like this:
| Group | Test (1 point each if true) |
|---|---|
| Profitability | 1. Return on assets (net profit ÷ total assets) is above zero. |
| Profitability | 2. Cash from operations is above zero. |
| Profitability | 3. Return on assets is higher than last year. |
| Profitability | 4. Cash from operations is higher than net profit. |
| Leverage and liquidity | 5. Debt to total assets is lower than last year (or zero in both years). |
| Leverage and liquidity | 6. Current ratio (current assets ÷ current liabilities) is higher than last year. |
| Leverage and liquidity | 7. Shares outstanding have not increased. |
| Operating efficiency | 8. Operating margin (operating profit ÷ revenue) is higher than last year. Operating margin replaces gross margin, which Indian filings do not report consistently. |
| Operating efficiency | 9. Asset turnover (revenue ÷ total assets) is higher than last year. |
The stock page shows the score with a label for its range: 0 to 3, 4 to 6, or 7 to 9. Those three ranges are ScripLens's own grouping for display. Piotroski did not publish them, and a higher score does not mean a better company.
Altman Z'' score
Edward Altman first published his Z-score in 1968 for manufacturers. The Z'' version, developed in the 1990s, leaves out the sales-to-assets ratio so it can be used for other companies. ScripLens calculates it from the latest annual results:
X2 = reserves ÷ total assets
X3 = (profit before tax + interest) ÷ total assets
X4 = shareholders' equity ÷ total liabilities (total assets − equity)
Z'' = 6.56 × X1 + 3.26 × X2 + 6.72 × X3 + 1.05 × X4
Total assets 1,000; working capital 100; reserves 300; profit before tax plus interest 150; equity 600, so liabilities 400.
X1 = 0.10, X2 = 0.30, X3 = 0.15, X4 = 600 ÷ 400 = 1.50.
Z'' = 0.656 + 0.978 + 1.008 + 1.575 = 4.22, which is above 2.6.
The zones used by ScripLens are: above 2.6, the safe zone; from 1.1 to 2.6, the grey zone; below 1.1, the distress zone. These cut-offs and zone names belong to Altman's model. ScripLens reproduces them for learning and does not judge a company by them.
Limits of both models
- Both use reported accounts, which can be affected by accounting choices, one-off items and restatements. Indian filings are not always comparable with the US data the models were built on.
- Neither model predicts a share price, and neither is a rating or a recommendation.
- The Altman Z'' is not suited to banks and other financial companies, whose balance sheets work differently. The screener's description says so, and the stock page labels the score "not for banks".
- The Piotroski score treats each test equally. A company that narrowly misses several tests can score lower than one that narrowly passes them.
- Both scores use the latest annual results loaded so far, so they can lag a newer filing.
Read a score with the underlying figures next to it, and with the explanation in Reading company numbers.
Educational explanations only, not investment advice, research or a recommendation to buy, sell or hold any security. Past performance does not indicate future results. Every example uses made-up round numbers. Read the Disclaimer before relying on any figure.