Beneish Model: Probability of Accounting Manipulation

I'm implemented a a reserarch notebook for the Beneish M-Score.
As of today, August 17th 2015, these companies are on the top 10 of the list:

ARGS ARGOS THERAPEUTICS INC 2042.79
UPIP UNWIRED PLANET INC 402.91
AGEN AGENUS INC 351.89
CMRX CHIMERIX INC 317.88
IMMY IMPRIMIS PHARMACEUTICALS INC 316.06
YOD YOU ON DEMAND HOLDINGS INC 195.50
MYOS MYOS CORP 182.36
AEGR AEGERION PHARMACEUTICALS INC 169.36

33
Notebook previews are currently unavailable.
11 responses

@Constantino how came I didnt see herbalife in the -2.22 zone... Bill Ackman openly say... that the accounting were manipulated and can your model print more than -4.00M-score.. since base on my computation herbalife belongs to M-score of negative -2.98 which is not included on your print.thanks

HelLo John,

I don't why, but the data for HLF are missing. Try the following code in the Research Notebook:

# M-Score of choosed companies, i.e. Herbalife Ltd (HLF)
print "M-Score AAPL:", m_score[symbols('AAPL')]
print "M-Score HLF:", m_score[symbols('HLF')]
f[symbols('HLF')]


The result will be:

M-Score AAPL: -3.02954938777
M-Score HLF: nan

enterprise_value                            NaN
free_cash_flow                              NaN
operating_cash_flow                         NaN
net_income                                  NaN
market_cap                                  NaN
shares_outstanding                          NaN
financing_cash_flow                         NaN
operating_income                            NaN
invested_capital                            NaN
cash_and_cash_equivalents                   NaN
days_in_sales                               NaN
gross_margin                                NaN
current_assets                              NaN
long_term_debt                              NaN
current_liabilities                         NaN
net_ppe                                     NaN
total_assets                                NaN
total_revenue                               NaN
depreciation_amortization_depletion         NaN
total_debt                                  NaN
total_liabilities                           NaN
non_operating_income                        NaN
dsri                                        NaN
gmi                                         NaN
aqi                                         NaN
sgi                                    0.528547
depi                                   0.189489
sgai                                   1.222203
lvgi                                        NaN
tata                                        NaN
Name: Equity(26892 [HLF]), dtype: float64


Today I've no time anymore to investigate further, maybe can you try to understand the reason?

Greetings
Costantino

can it print more than -2.22 M score?

yes, of course! look at the code and change the following line, if you need another threshold:

manipulators = m_score[m_score > -2.22].order(ascending=False)


thanks Constantino.
Are these stocks manipulated to the upside.. or to the downside? Does manipulation implies that the stock price are keep artificially high?and is good to short?

nice work!

@John: Typically, this test is used to look for inflated / upside manipulation. But it might be better used as a filter to remove high m_score stocks from an algo universe than as an actual signal to short the high m_score stock.

Robby base on history... were Beneish Model able to accurately predict enron... or mbia.... as very high... m score...? Maybe e can use... Beneish Model to predict the next accouting scandal... or the next enron.... If Beneish Model were able to flag those stocks base... on history as very high... on the list of M-score.... skeptical...

Is it just coincidence that almost all the companies identified are either pharma or patent heavy companies (don't know about You on Demand though)? Wondering if should incorporate some sort of varying weight allocations based on operating industry? FI's for instance should definitely be excluded

I learned a lot from reading your code. I had been having nothing but trouble trying to define fundamental ratios for the LTM and TTM. Thanks for posting.

I have one suggestion. Beneish points out (citing himself) in his paper: "Following Beneish (1997, 1999), we winsorize the predictive variables in the probability of manipulation model at the 1 percent and 99 percent levels each year in our sample period to deal with problems caused by small denominators and to control for the effect of potential outliers." If I understand the Python implementation of winsorization correctly, you should add a cell that contains a line like

f.loc['dsri'] = scipy.stats.mstats.winsorize(f.loc['dsri'], limits=[.01,.01])

for each of your variables. For the time period you used, winsorization changes only a few scores, and those only a little.

If you're interested in working with someone with strong finance and accounting but beginner's Python to take a long-short Beneish algorithm to backtesting, please let me know. Either way, thanks again for posting instructive code using multi-period fundamental data.

Hi Tom,

You are welcome! Let me know, how may I help!

Greetings
Costantino

I've added the winsorize for each variable, fixed the date ('today') to be the same as the original notebook (Aug 15, 2015) to be able to compare them, and, with some variation, the results are the same.

This M-score casts a wide net, and a lot of companies get wrapped up in this screening, including YHOO, TLSA, FB, SSYS, GPRO, VALU, AAL, AMBA, IRBT, SFLY, to name a few I recognize and would be surprised they are cooking the books.

The logical next step is to actually reproduce the results of the paper and confirm that this is a mis-priced factor.

26