Notebook

CHS Model (RISK OF FINANCIAL DISTRESS)

In a 2008 paper called "In Search of Distress Risk", John Campbell, Jens Hilscher, and Jan Szilagyi comprehensively explore the determinants of corporate failure.

  • NIMTA = weighted average (quarter's net income / MTA)
  • MTA = market value of total assets = book value of liabilities + market cap
  • TLMTA = total liabilities / MTA
  • CASHMTA = cash and equivalents/ / MTA
  • EXRET = weighted average (log(1 + stock's return) − log(1 + S&P 500 return)
  • SIGMA = annualized stock's standard deviation over the previous 3 months
  • RSIZE = log(stock market cap / S&P 500 total market value)
  • MB = MTA / adjusted book value, where adjusted book value = book value + .1× (market cap-book value)
  • PRICE = log(recent stock price), capped at 15, so a stock with a stock price of 20, would be given a value of log(15) instead of log(20)
  • XAVG =.5333 × t +.2666 × t −1+.1333 × t −2 +.0666 × t −3

The logit model generates a binary dependent variable or logit value, “logit probability of financial distress” or LPFD, calculated as follows:

LPFD = −20.26 × NIMTAAVG +1.42 × TLMTA −7.13 × EXRETAVG +1.41 × SIGMA −0.045 × RSIZE −2.13 × CASHMTA +0.075 × MB −0.058 × PRICE −9.16

The paper was updated on Januany, 2010 with new weights.

Link to the Paper: http://scholar.harvard.edu/campbell/publications/search-distress-risk

In [137]:
# Initialisation

import pandas as pd
import numpy as np
import datetime
from collections import OrderedDict

fundamentals = init_fundamentals()
In [138]:
def three_month_ago(t):
    m = t.month - 3
    y = t.year
    if m < 1:
        m += 12
        y -= 1
    return datetime.date(y, m, 1)

today = datetime.datetime.now()
lag = 0
n = 5
tt = []
tt.append(datetime.date(today.year - lag, today.month, 1))
for i in range(1, n):
    tt.append(three_month_ago(tt[i-1]))
for t in tt:
    print t
2015-07-01
2015-04-01
2015-01-01
2014-10-01
2014-07-01
In [139]:
def fund_df(t):
    return get_fundamentals(
        query(
            fundamentals.valuation.enterprise_value,
            fundamentals.cash_flow_statement.free_cash_flow,
            fundamentals.cash_flow_statement.operating_cash_flow,
            fundamentals.income_statement.net_income,
            fundamentals.valuation.market_cap,
            fundamentals.valuation.shares_outstanding,
            fundamentals.cash_flow_statement.financing_cash_flow,
            fundamentals.income_statement.operating_income,
            fundamentals.balance_sheet.invested_capital,
            fundamentals.balance_sheet.cash_and_cash_equivalents,
            # Rations for M-Score
            fundamentals.operation_ratios.days_in_sales,
            fundamentals.operation_ratios.gross_margin,
            fundamentals.balance_sheet.current_assets,
            fundamentals.balance_sheet.net_ppe,
            fundamentals.balance_sheet.total_assets,
            fundamentals.income_statement.total_revenue,
            fundamentals.income_statement.depreciation_amortization_depletion,
            fundamentals.income_statement.selling_general_and_administration,
            fundamentals.balance_sheet.total_debt,
            fundamentals.balance_sheet.total_liabilities,
            fundamentals.income_statement.non_operating_income,
            fundamentals.cash_flow_statement.cash_flow_from_continuing_operating_activities
        )
        
         # No Financials (103), Real Estate (104), Utilities (207) and ADR
        .filter(fundamentals.company_reference.industry_template_code != 'B')
        .filter(fundamentals.company_reference.industry_template_code != 'I')
        .filter(fundamentals.company_reference.industry_template_code != 'F')
        .filter(fundamentals.asset_classification.morningstar_sector_code != 103)
        .filter(fundamentals.asset_classification.morningstar_sector_code != 104)
        .filter(fundamentals.asset_classification.morningstar_sector_code != 207)
        .filter(fundamentals.share_class_reference.is_depositary_receipt == False)
        .filter(fundamentals.share_class_reference.is_primary_share == True)
        
        # Only pick active common stocks
        .filter(fundamentals.share_class_reference.share_class_status == "A")
        .filter(fundamentals.share_class_reference.security_type == "ST00000001")
        # Exclude When Distributed(WD), When Issued(WI) and VJ - usuallly companies in bankruptcy
        .filter(~fundamentals.share_class_reference.symbol.like('%\_WI'))
        .filter(~fundamentals.share_class_reference.symbol.like('%\_WD'))
        .filter(~fundamentals.share_class_reference.symbol.like('%\_VJ'))
        # Exclude Halted stocks
        .filter(~fundamentals.share_class_reference.symbol.like('%\_V'))
        .filter(~fundamentals.share_class_reference.symbol.like('%\_H'))
        
        
        # Only NYSE, AMEX and Nasdaq
        .filter(fundamentals.company_reference.primary_exchange_id.in_(['NYSE', 'NAS', 'AMEX']))
               
        # Sanity check 
        # TODO better None or > 0 ?
        .filter(fundamentals.valuation.market_cap > 0)
        .filter(fundamentals.valuation.shares_outstanding > 0)
        .filter(fundamentals.balance_sheet.invested_capital > 0)
        .filter(fundamentals.balance_sheet.cash_and_cash_equivalents > 0)
        .filter(fundamentals.balance_sheet.current_assets > 0)
        #.filter(fundamentals.balance_sheet.current_assets is not None)
        .filter(fundamentals.balance_sheet.total_assets > 0)
        #.filter(fundamentals.balance_sheet.total_assets is not None)
        .filter(fundamentals.cash_flow_statement.free_cash_flow is not None)
        .filter(fundamentals.valuation.enterprise_value > 0),
        
        t)

fund_dff = []
for i in range(0, n):
    fund_dff.append(fund_df(tt[i]))
In [140]:
fundamental_dict = OrderedDict()
for i in reversed(range(0, n)):
    qtr = "%d-%02d" % (tt[i].year, tt[i].month)
    fundamental_dict[qtr] = fund_dff[i]

fundamental_data = pd.Panel(fundamental_dict)
fundamental_data.items
Out[140]:
Index([u'2014-07', u'2014-10', u'2015-01', u'2015-04', u'2015-07'], dtype='object')
In [141]:
symbols = fundamental_data.minor_axis
price_history = get_pricing(symbols, fields='close_price', start_date=t1, end_date=t0)
price_history
Out[141]:
Equity(2 [AA]) Equity(24 [AAPL]) Equity(31 [ABAX]) Equity(41 [ARCB]) Equity(52 [ABM]) Equity(53 [ABMD]) Equity(62 [ABT]) Equity(67 [ADSK]) Equity(69 [ACAT]) Equity(76 [TAP]) ... Equity(48999 [AAPC]) Equity(49010 [TBRA]) Equity(49024 [BOJA]) Equity(49096 [PTXP]) Equity(49126 [WING]) Equity(49131 [OESX]) Equity(49155 [FOGO]) Equity(49179 [CETX]) Equity(49196 [PIRS]) Equity(49200 [YECO])
2015-04-01 00:00:00+00:00 13.0100 124.2200 63.8600 38.260 31.94 69.88 45.890 58.740 36.12 74.500 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-02 00:00:00+00:00 13.1500 125.3100 63.1300 37.100 32.03 70.70 46.120 59.825 36.61 75.390 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-06 00:00:00+00:00 13.3600 127.3400 62.2700 35.650 32.12 70.88 46.310 59.720 36.55 76.130 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-07 00:00:00+00:00 13.4400 126.0050 62.1900 36.240 31.84 69.69 46.180 60.690 36.66 78.230 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-08 00:00:00+00:00 13.6800 125.6000 63.1100 35.780 32.45 69.68 46.600 61.820 36.54 78.650 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-09 00:00:00+00:00 13.2100 126.5600 63.5600 36.350 32.45 69.80 47.000 62.820 36.73 77.920 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-10 00:00:00+00:00 13.1570 127.1000 63.9300 37.130 31.89 69.35 47.150 62.740 35.78 77.910 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-13 00:00:00+00:00 13.2900 126.8500 64.3000 36.430 32.01 67.96 46.530 61.760 35.70 76.650 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-14 00:00:00+00:00 13.3750 126.3000 64.3900 36.470 32.03 67.46 46.700 62.020 35.13 76.960 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-15 00:00:00+00:00 13.3500 126.7800 63.9100 37.355 32.11 67.45 46.820 61.520 37.48 76.870 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-16 00:00:00+00:00 13.4599 126.1800 63.8200 37.660 31.82 68.30 46.540 61.670 37.34 76.925 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-17 00:00:00+00:00 13.4700 124.7600 62.2600 37.180 31.26 67.29 46.250 60.360 37.66 76.940 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-20 00:00:00+00:00 13.5700 127.5900 62.9600 38.760 31.43 69.32 46.640 61.040 38.49 76.000 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-21 00:00:00+00:00 13.5200 126.9200 63.3200 38.740 32.02 69.71 47.150 61.610 36.77 75.930 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-22 00:00:00+00:00 13.5600 128.6300 63.2200 39.250 31.88 69.31 48.350 62.140 36.63 75.530 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-23 00:00:00+00:00 13.1800 129.6800 63.2700 39.360 32.12 69.57 48.440 62.760 37.04 75.110 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-24 00:00:00+00:00 13.2100 130.2800 63.6200 38.770 31.95 68.84 48.320 62.650 36.91 75.145 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-27 00:00:00+00:00 13.4500 132.6900 62.4800 38.220 31.96 65.99 47.500 60.600 36.71 74.600 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-28 00:00:00+00:00 13.4800 130.5500 64.6200 38.260 32.25 66.90 47.610 60.660 36.70 74.700 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-29 00:00:00+00:00 13.6141 128.6400 64.0900 37.220 32.12 65.52 47.170 59.540 36.20 74.080 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-04-30 00:00:00+00:00 13.4200 125.2200 64.0300 35.710 32.05 63.23 46.420 56.820 35.52 73.530 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-05-01 00:00:00+00:00 14.1500 128.9700 55.5000 36.710 32.17 63.77 46.680 57.600 35.42 74.030 ... 10.1900 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-05-04 00:00:00+00:00 14.0150 128.7000 55.0300 36.580 32.32 65.14 47.020 57.760 35.31 73.650 ... 10.1438 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-05-05 00:00:00+00:00 13.8300 125.8100 53.1400 35.170 32.17 75.48 46.840 56.740 34.54 72.890 ... 10.1900 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-05-06 00:00:00+00:00 13.7000 125.0850 52.7500 35.310 32.24 73.86 46.560 56.190 34.47 73.530 ... NaN 13.50 NaN NaN NaN NaN NaN NaN NaN NaN
2015-05-07 00:00:00+00:00 13.7099 125.2500 54.4800 37.060 32.31 69.72 46.505 56.350 35.19 74.020 ... 10.1800 15.48 NaN NaN NaN NaN NaN NaN NaN NaN
2015-05-08 00:00:00+00:00 13.8250 127.5901 54.2300 36.620 32.13 67.37 47.570 57.270 35.50 74.550 ... 10.2488 15.75 23.8100 NaN NaN NaN NaN NaN NaN NaN
2015-05-11 00:00:00+00:00 13.6600 126.3200 53.2500 36.690 32.01 66.56 47.330 57.450 35.45 74.910 ... 10.1500 14.91 24.9000 NaN NaN NaN NaN NaN NaN NaN
2015-05-12 00:00:00+00:00 13.5500 125.8600 52.0900 36.290 32.01 68.57 47.140 56.800 35.13 73.980 ... 10.2700 13.97 25.5000 NaN NaN NaN NaN NaN NaN NaN
2015-05-13 00:00:00+00:00 13.6350 126.0200 52.1500 36.220 31.86 66.25 47.040 58.680 32.50 74.600 ... 10.2400 13.90 26.3600 NaN NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2015-05-20 00:00:00+00:00 13.0700 130.0700 52.6300 35.720 32.96 66.89 49.140 57.590 33.16 75.560 ... 10.3500 14.22 25.5800 NaN NaN NaN NaN NaN NaN NaN
2015-05-21 00:00:00+00:00 13.0000 131.4000 53.0800 36.460 32.64 65.06 49.350 57.510 33.76 75.050 ... 10.4000 13.25 26.2399 NaN NaN NaN NaN NaN NaN NaN
2015-05-22 00:00:00+00:00 12.9500 132.5700 52.6700 35.720 32.50 63.46 49.040 56.400 34.15 74.250 ... 10.3800 13.55 25.6999 NaN NaN NaN NaN NaN NaN NaN
2015-05-26 00:00:00+00:00 12.7600 129.6300 53.3500 35.190 32.24 60.73 48.600 55.080 33.40 73.660 ... 10.2100 13.51 26.3900 NaN NaN NaN NaN NaN NaN NaN
2015-05-27 00:00:00+00:00 12.7900 132.0100 53.4100 36.280 32.82 61.82 49.020 55.490 33.39 72.950 ... 10.1700 13.01 26.5500 NaN NaN NaN NaN NaN NaN NaN
2015-05-28 00:00:00+00:00 12.6700 131.7700 52.7900 36.110 32.71 60.57 49.270 54.550 32.98 74.550 ... 10.3900 13.64 27.2236 NaN NaN NaN NaN NaN NaN NaN
2015-05-29 00:00:00+00:00 12.5090 130.3200 53.0900 34.170 32.43 59.69 48.590 54.150 33.05 73.380 ... 10.1600 13.20 27.5200 NaN NaN NaN NaN NaN NaN NaN
2015-06-01 00:00:00+00:00 12.4100 130.5300 53.0100 34.940 32.48 60.30 48.940 54.400 32.73 73.070 ... 10.1505 13.84 28.0100 NaN NaN NaN NaN NaN NaN NaN
2015-06-02 00:00:00+00:00 12.6299 129.9600 52.9600 34.780 32.37 59.70 48.940 54.350 32.60 74.030 ... 10.1600 14.47 25.9100 NaN NaN NaN NaN NaN NaN NaN
2015-06-03 00:00:00+00:00 12.6100 130.1600 53.0803 34.800 33.16 62.05 48.870 54.910 32.86 74.790 ... 10.1900 15.35 25.5999 NaN NaN NaN NaN NaN NaN NaN
2015-06-04 00:00:00+00:00 12.5100 129.4700 52.8000 34.710 32.70 63.31 48.700 53.710 32.66 74.900 ... 10.1600 17.32 25.5200 NaN NaN NaN NaN NaN NaN NaN
2015-06-05 00:00:00+00:00 12.4100 128.6500 53.0000 35.480 32.70 63.84 48.460 54.610 33.41 72.640 ... 10.2200 17.85 24.5100 19.50 NaN NaN NaN NaN NaN NaN
2015-06-08 00:00:00+00:00 12.2500 127.7600 52.2900 34.680 32.55 63.11 48.415 54.250 33.32 72.860 ... 10.2000 20.99 24.7900 20.00 NaN NaN NaN NaN NaN NaN
2015-06-09 00:00:00+00:00 12.1800 127.4100 51.5800 34.080 32.90 61.52 48.170 53.920 33.33 72.450 ... 10.2100 20.64 24.9900 19.85 NaN NaN NaN NaN NaN NaN
2015-06-10 00:00:00+00:00 12.1600 128.8700 51.4800 34.480 33.23 62.99 48.480 54.980 33.92 72.640 ... 10.3000 22.76 25.4200 19.80 NaN NaN NaN NaN NaN NaN
2015-06-11 00:00:00+00:00 12.1000 128.6000 51.5700 34.580 33.31 63.44 49.070 54.490 33.80 72.730 ... 10.2000 22.46 25.8600 19.77 NaN NaN NaN NaN NaN NaN
2015-06-12 00:00:00+00:00 12.0600 127.1600 51.3600 34.190 33.04 63.66 48.670 54.060 33.59 72.760 ... 10.3400 22.49 25.1600 19.80 NaN NaN NaN NaN NaN NaN
2015-06-15 00:00:00+00:00 12.0050 126.9300 51.1800 33.800 32.91 65.04 48.090 53.560 33.32 71.420 ... 10.3100 20.46 25.4600 20.00 30.4100 NaN NaN NaN NaN NaN
2015-06-16 00:00:00+00:00 12.0300 127.5900 51.5400 33.210 32.95 65.74 48.490 53.430 34.21 72.510 ... 10.2000 20.86 25.1500 20.00 29.5699 2.69 NaN NaN NaN NaN
2015-06-17 00:00:00+00:00 11.9500 127.2900 51.7400 33.250 32.84 65.65 48.580 53.570 34.87 72.980 ... 10.3499 20.93 25.0300 19.85 28.3000 2.67 NaN NaN NaN NaN
2015-06-18 00:00:00+00:00 11.9100 127.8400 52.0000 33.790 33.27 67.15 49.940 54.170 35.47 73.700 ... 10.3035 18.25 24.7600 19.64 28.6500 2.77 NaN NaN NaN NaN
2015-06-19 00:00:00+00:00 11.9200 126.4200 51.9300 34.280 33.35 67.69 49.870 53.560 34.66 73.190 ... NaN 17.15 24.3900 19.29 29.3450 2.80 NaN NaN NaN NaN
2015-06-22 00:00:00+00:00 11.7600 127.6100 53.1600 34.040 33.40 68.36 50.030 54.550 34.87 73.860 ... 10.3800 19.48 23.5200 19.10 28.5100 2.78 26.1900 NaN NaN NaN
2015-06-23 00:00:00+00:00 11.7400 127.0200 52.4400 34.090 33.61 67.44 49.880 54.090 35.02 72.250 ... 10.3499 18.85 22.5600 19.03 28.7900 2.86 25.2000 NaN NaN NaN
2015-06-24 00:00:00+00:00 11.7300 128.1600 51.4900 32.780 33.36 66.69 49.500 53.910 34.85 72.620 ... 10.3500 18.88 23.3300 19.68 28.3300 2.77 24.3200 NaN NaN NaN
2015-06-25 00:00:00+00:00 11.5700 127.5100 52.5300 32.520 33.55 66.06 49.340 53.300 34.48 72.160 ... 10.1800 19.00 24.0800 19.04 27.9600 2.75 22.5000 3.900 NaN NaN
2015-06-26 00:00:00+00:00 11.7000 126.7800 52.0600 32.480 33.32 66.75 49.960 52.190 34.39 72.290 ... NaN 17.99 23.5100 19.32 28.2500 2.72 22.6800 3.820 NaN NaN
2015-06-29 00:00:00+00:00 11.3600 124.5800 51.1900 31.260 32.86 65.33 49.000 50.410 33.26 70.600 ... NaN 17.22 23.4800 19.56 27.5000 2.41 22.1100 3.787 NaN 5.930
2015-06-30 00:00:00+00:00 11.1550 125.4200 51.4500 31.800 32.86 65.71 49.080 50.080 33.22 69.810 ... NaN 17.34 23.8800 19.39 28.4100 2.51 23.1500 3.154 2.75 6.075
2015-07-01 00:00:00+00:00 11.0800 126.5800 52.0300 32.220 32.80 66.16 49.540 50.380 33.65 70.240 ... NaN 16.89 23.3000 19.46 27.9400 2.52 23.5784 3.170 2.67 6.030

64 rows × 3391 columns

In [142]:
prices_sp_all = get_pricing('SPY', fields='close_price', start_date=t4, end_date=t0)
prices_sp_index = pd.date_range(prices_sp_all.index[0], prices_sp_all.index[-1])
prices_sp_all = prices_sp_all.reindex(prices_sp_index, method='ffill')
dates = []
items = fundamental_data.items
for date_str in items[-5:]:
    date_str = date_str + "-01"
    dates.append(pd.Timestamp(date_str))
prices_sp = 10.0*prices_sp_all.loc[dates]
print prices_sp

returns_sp = ((prices_sp - prices_sp.shift(1)) / prices_sp.shift(1))[1:]
returns_sp
2014-07-01    1970.6
2014-10-01    1943.4
2015-01-01    2055.2
2015-04-01    2057.6
2015-07-01    2075.2
Name: Equity(8554 [SPY]), dtype: float64
Out[142]:
2014-10-01   -0.013803
2015-01-01    0.057528
2015-04-01    0.001168
2015-07-01    0.008554
Name: Equity(8554 [SPY]), dtype: float64
In [143]:
mta = fundamental_data[-4:].loc[:,'total_debt'] + fundamental_data[-4:].loc[:,'market_cap']
nimta = fundamental_data[-4:].loc[:,'net_income'] / mta
tlmta = fundamental_data[-4:].loc[:,'total_debt'] / mta
cashmta = fundamental_data[-4:].loc[:,'cash_and_cash_equivalents'] / mta

nimta
Out[143]:
2014-10 2015-01 2015-04 2015-07
Equity(2 [AA]) 0.005092 0.005384 NaN NaN
Equity(24 [AAPL]) 0.012215 0.012179 0.023333 0.017529
Equity(31 [ABAX]) 0.004117 0.004135 0.003923 0.009592
Equity(41 [ARCB]) 0.015357 0.014566 0.012870 0.000734
Equity(52 [ABM]) 0.010936 0.014420 NaN NaN
Equity(53 [ABMD]) -0.001694 0.002447 0.004200 0.035490
Equity(62 [ABT]) 0.006607 0.006978 NaN NaN
Equity(67 [ADSK]) 0.002393 0.000737 0.000809 0.001512
Equity(69 [ACAT]) 0.007762 0.033943 0.016059 -0.048309
Equity(76 [TAP]) 0.016747 -0.001985 NaN NaN
Equity(84 [ACET]) 0.008163 0.006432 0.008695 0.009944
Equity(88 [ACI]) -0.017336 -0.017594 NaN NaN
Equity(100 [IEP]) -0.000322 -0.015505 -0.013327 0.007017
Equity(106 [ACU]) 0.030016 0.012604 NaN NaN
Equity(110 [ACXM]) -0.004658 -0.000818 0.002379 -0.003501
Equity(112 [ACY]) -0.033020 -0.067888 NaN NaN
Equity(114 [ADBE]) 0.001255 0.001931 0.002192 0.003424
Equity(117 [AEY]) 0.003444 0.020249 0.014016 0.007903
Equity(122 [ADI]) 0.009717 0.005985 0.008484 0.009549
Equity(128 [ADM]) 0.013859 0.018868 NaN NaN
Equity(153 [AE]) 0.019361 0.019003 NaN NaN
Equity(162 [AEPI]) 0.002662 0.002242 0.000900 0.021802
Equity(168 [AET]) 0.014708 0.015007 NaN NaN
Equity(197 [AGCO]) 0.030332 0.011554 NaN NaN
Equity(205 [AGN]) 0.007578 0.004755 NaN NaN
Equity(216 [HES]) 0.026100 0.035797 NaN NaN
Equity(225 [AHPI]) -0.059740 -0.058038 -0.003462 -0.043190
Equity(247 [AIN]) 0.007936 0.007886 NaN NaN
Equity(253 [AIR]) 0.008839 0.008659 NaN NaN
Equity(270 [AKRX]) 0.001923 -0.002290 0.005185 0.005608
... ... ... ... ...
Equity(48506 [ZSAN]) NaN NaN NaN -0.044476
Equity(48519 [TCON]) NaN NaN NaN -0.025112
Equity(48520 [LENS]) NaN NaN NaN NaN
Equity(48532 [ENTL]) NaN NaN NaN -0.008502
Equity(48534 [FLKS]) NaN NaN NaN NaN
Equity(48545 [AVGR]) NaN NaN NaN -0.055210
Equity(48547 [ONCE]) NaN NaN NaN NaN
Equity(48554 [MDVX]) NaN NaN NaN -0.033802
Equity(48602 [ITEK]) NaN NaN NaN -0.014514
Equity(48629 [INOV]) NaN NaN 0.002942 0.003092
Equity(48635 [BLPH]) NaN NaN NaN NaN
Equity(48732 [QPAC]) NaN NaN NaN -0.000407
Equity(48781 [CHEK]) NaN NaN NaN NaN
Equity(48789 [STDY]) NaN NaN NaN -0.079980
Equity(48804 [TANH]) NaN NaN NaN NaN
Equity(48823 [SEDG]) NaN NaN NaN 0.003992
Equity(48872 [KRNT]) NaN NaN NaN NaN
Equity(48926 [XBIT]) NaN NaN NaN -0.013373
Equity(48934 [ETSY]) NaN NaN NaN -0.022886
Equity(48981 [APIC]) NaN NaN NaN -0.035539
Equity(48999 [AAPC]) NaN NaN NaN -0.000031
Equity(49010 [TBRA]) NaN NaN NaN -0.025417
Equity(49024 [BOJA]) NaN NaN NaN 0.003141
Equity(49096 [PTXP]) NaN NaN NaN -0.003686
Equity(49126 [WING]) NaN NaN NaN 0.002717
Equity(49131 [OESX]) NaN NaN NaN -0.061434
Equity(49155 [FOGO]) NaN NaN NaN 0.005419
Equity(49179 [CETX]) NaN NaN NaN 0.029108
Equity(49196 [PIRS]) NaN NaN NaN -0.031629
Equity(49200 [YECO]) NaN NaN NaN 0.024620

3391 rows × 4 columns

In [144]:
prices = fundamental_data[-5:].loc[:,'market_cap'] / fundamental_data[-5:].loc[:,'shares_outstanding']
prices
Out[144]:
2014-07 2014-10 2015-01 2015-04 2015-07
Equity(2 [AA]) 14.93 16.190000 15.8500 NaN NaN
Equity(24 [AAPL]) 643.86 100.750000 112.5200 126.37 126.750000
Equity(31 [ABAX]) 44.26 50.820000 57.9300 66.54 52.080000
Equity(41 [ARCB]) 42.65 37.830000 46.2900 37.95 32.480000
Equity(52 [ABM]) 26.71 26.230000 28.9700 NaN NaN
Equity(53 [ABMD]) 24.60 24.930000 38.3600 73.47 66.750000
Equity(62 [ABT]) 40.54 42.010000 45.6900 NaN NaN
Equity(67 [ADSK]) 56.40 54.280000 60.5100 59.30 52.200000
Equity(69 [ACAT]) 39.34 35.580000 35.0500 36.01 34.400000
Equity(76 [TAP]) 74.40 74.070000 74.9000 NaN NaN
Equity(84 [ACET]) 18.20 19.820000 22.1000 22.39 25.370000
Equity(88 [ACI]) 3.57 2.090000 1.7400 NaN NaN
Equity(100 [IEP]) 99.72 107.080000 93.6500 90.91 86.990000
Equity(106 [ACU]) 16.75 16.500000 19.4545 NaN NaN
Equity(110 [ACXM]) 21.56 17.135000 20.5400 18.78 18.390000
Equity(112 [ACY]) 16.06 11.189999 8.5064 NaN NaN
Equity(114 [ADBE]) 72.00 68.355000 73.0850 73.60 82.306059
Equity(117 [AEY]) 2.77 2.320100 2.4400 2.37 2.380000
Equity(122 [ADI]) 53.50 50.025000 55.5550 64.81 65.800000
Equity(128 [ADM]) 43.82 50.870000 52.8900 NaN NaN
Equity(153 [AE]) 72.18 48.680000 48.1000 NaN NaN
Equity(162 [AEPI]) 35.58 39.370000 56.4700 55.78 55.713556
Equity(168 [AET]) 81.77 82.030000 90.1400 NaN NaN
Equity(197 [AGCO]) 56.09 46.060000 45.7100 NaN NaN
Equity(205 [AGN]) 173.95 178.000000 213.4000 NaN NaN
Equity(216 [HES]) 98.29 96.170000 74.1300 NaN NaN
Equity(225 [AHPI]) 2.35 2.010000 1.5100 1.60 1.441600
Equity(247 [AIN]) 37.98 35.490000 38.0600 NaN NaN
Equity(253 [AIR]) 27.61 25.130000 28.1500 NaN NaN
Equity(270 [AKRX]) 31.71 35.700000 36.4500 48.08 43.510000
... ... ... ... ... ...
Equity(48506 [ZSAN]) NaN NaN NaN NaN 7.400000
Equity(48519 [TCON]) NaN NaN NaN NaN 12.500000
Equity(48520 [LENS]) NaN NaN NaN NaN 8.020000
Equity(48532 [ENTL]) NaN NaN NaN NaN 26.260000
Equity(48534 [FLKS]) NaN NaN NaN NaN 19.480000
Equity(48545 [AVGR]) NaN NaN NaN NaN 13.000000
Equity(48547 [ONCE]) NaN NaN NaN NaN 59.870000
Equity(48554 [MDVX]) NaN NaN NaN NaN 3.951200
Equity(48602 [ITEK]) NaN NaN NaN NaN 5.000000
Equity(48629 [INOV]) NaN NaN NaN 29.68 28.140000
Equity(48635 [BLPH]) NaN NaN NaN 9.35 7.540000
Equity(48732 [QPAC]) NaN NaN NaN NaN 9.940000
Equity(48781 [CHEK]) NaN NaN NaN NaN 2.720000
Equity(48789 [STDY]) NaN NaN NaN NaN 5.130000
Equity(48804 [TANH]) NaN NaN NaN 7.80 18.020000
Equity(48823 [SEDG]) NaN NaN NaN NaN 38.180000
Equity(48872 [KRNT]) NaN NaN NaN NaN 14.440000
Equity(48926 [XBIT]) NaN NaN NaN NaN 21.681455
Equity(48934 [ETSY]) NaN NaN NaN NaN 14.250000
Equity(48981 [APIC]) NaN NaN NaN NaN 10.558010
Equity(48999 [AAPC]) NaN NaN NaN NaN 10.180000
Equity(49010 [TBRA]) NaN NaN NaN NaN 17.930000
Equity(49024 [BOJA]) NaN NaN NaN NaN 23.540856
Equity(49096 [PTXP]) NaN NaN NaN NaN 19.340000
Equity(49126 [WING]) NaN NaN NaN NaN 28.250000
Equity(49131 [OESX]) NaN NaN NaN NaN 3.364870
Equity(49155 [FOGO]) NaN NaN NaN NaN 22.680000
Equity(49179 [CETX]) NaN NaN NaN NaN 3.820000
Equity(49196 [PIRS]) NaN NaN NaN NaN 3.980000
Equity(49200 [YECO]) NaN NaN NaN NaN 6.170000

3391 rows × 5 columns

In [145]:
#Equity(24 [AAPL]) 	643.86 	100.750000 	112.5200 	126.37 	126.750000
# (100.750000 - 643.86) / 643.86
returns = ((prices - prices.shift(1, axis=1)) / prices.shift(1, axis=1)).iloc[:,1:]
returns
Out[145]:
2014-10 2015-01 2015-04 2015-07
Equity(2 [AA]) 0.084394 -0.021001 NaN NaN
Equity(24 [AAPL]) -0.843522 0.116824 0.123089 0.003007
Equity(31 [ABAX]) 0.148215 0.139906 0.148628 -0.217313
Equity(41 [ARCB]) -0.113013 0.223632 -0.180169 -0.144137
Equity(52 [ABM]) -0.017971 0.104461 NaN NaN
Equity(53 [ABMD]) 0.013415 0.538708 0.915276 -0.091466
Equity(62 [ABT]) 0.036260 0.087598 NaN NaN
Equity(67 [ADSK]) -0.037589 0.114775 -0.019997 -0.119730
Equity(69 [ACAT]) -0.095577 -0.014896 0.027389 -0.044710
Equity(76 [TAP]) -0.004435 0.011206 NaN NaN
Equity(84 [ACET]) 0.089011 0.115035 0.013122 0.133095
Equity(88 [ACI]) -0.414566 -0.167464 NaN NaN
Equity(100 [IEP]) 0.073807 -0.125420 -0.029258 -0.043120
Equity(106 [ACU]) -0.014925 0.179061 NaN NaN
Equity(110 [ACXM]) -0.205241 0.198716 -0.085686 -0.020767
Equity(112 [ACY]) -0.303238 -0.239821 NaN NaN
Equity(114 [ADBE]) -0.050625 0.069198 0.007047 0.118289
Equity(117 [AEY]) -0.162419 0.051679 -0.028689 0.004219
Equity(122 [ADI]) -0.064953 0.110545 0.166592 0.015275
Equity(128 [ADM]) 0.160885 0.039709 NaN NaN
Equity(153 [AE]) -0.325575 -0.011915 NaN NaN
Equity(162 [AEPI]) 0.106521 0.434341 -0.012219 -0.001191
Equity(168 [AET]) 0.003180 0.098866 NaN NaN
Equity(197 [AGCO]) -0.178820 -0.007599 NaN NaN
Equity(205 [AGN]) 0.023283 0.198876 NaN NaN
Equity(216 [HES]) -0.021569 -0.229177 NaN NaN
Equity(225 [AHPI]) -0.144681 -0.248756 0.059603 -0.099000
Equity(247 [AIN]) -0.065561 0.072415 NaN NaN
Equity(253 [AIR]) -0.089823 0.120175 NaN NaN
Equity(270 [AKRX]) 0.125828 0.021008 0.319067 -0.095050
... ... ... ... ...
Equity(48506 [ZSAN]) NaN NaN NaN NaN
Equity(48519 [TCON]) NaN NaN NaN NaN
Equity(48520 [LENS]) NaN NaN NaN NaN
Equity(48532 [ENTL]) NaN NaN NaN NaN
Equity(48534 [FLKS]) NaN NaN NaN NaN
Equity(48545 [AVGR]) NaN NaN NaN NaN
Equity(48547 [ONCE]) NaN NaN NaN NaN
Equity(48554 [MDVX]) NaN NaN NaN NaN
Equity(48602 [ITEK]) NaN NaN NaN NaN
Equity(48629 [INOV]) NaN NaN NaN -0.051887
Equity(48635 [BLPH]) NaN NaN NaN -0.193583
Equity(48732 [QPAC]) NaN NaN NaN NaN
Equity(48781 [CHEK]) NaN NaN NaN NaN
Equity(48789 [STDY]) NaN NaN NaN NaN
Equity(48804 [TANH]) NaN NaN NaN 1.310256
Equity(48823 [SEDG]) NaN NaN NaN NaN
Equity(48872 [KRNT]) NaN NaN NaN NaN
Equity(48926 [XBIT]) NaN NaN NaN NaN
Equity(48934 [ETSY]) NaN NaN NaN NaN
Equity(48981 [APIC]) NaN NaN NaN NaN
Equity(48999 [AAPC]) NaN NaN NaN NaN
Equity(49010 [TBRA]) NaN NaN NaN NaN
Equity(49024 [BOJA]) NaN NaN NaN NaN
Equity(49096 [PTXP]) NaN NaN NaN NaN
Equity(49126 [WING]) NaN NaN NaN NaN
Equity(49131 [OESX]) NaN NaN NaN NaN
Equity(49155 [FOGO]) NaN NaN NaN NaN
Equity(49179 [CETX]) NaN NaN NaN NaN
Equity(49196 [PIRS]) NaN NaN NaN NaN
Equity(49200 [YECO]) NaN NaN NaN NaN

3391 rows × 4 columns

In [146]:
exret = (np.log(returns.add(1))).sub(np.log(returns_sp.add(1)))
exret
Out[146]:
2014-10 2015-01 2015-04 2015-07
Equity(2 [AA]) 0.094920 -0.077158 NaN NaN
Equity(24 [AAPL]) -1.840940 0.054555 0.114916 -0.005515
Equity(31 [ABAX]) 0.152108 0.075011 0.137401 -0.253540
Equity(41 [ARCB]) -0.106026 0.145889 -0.199824 -0.164162
Equity(52 [ABM]) -0.004235 0.043423 NaN NaN
Equity(53 [ABMD]) 0.027225 0.375009 0.648695 -0.104440
Equity(62 [ABT]) 0.049518 0.028038 NaN NaN
Equity(67 [ADSK]) -0.024414 0.052719 -0.021366 -0.136044
Equity(69 [ACAT]) -0.086559 -0.070942 0.025854 -0.054257
Equity(76 [TAP]) 0.009454 -0.044791 NaN NaN
Equity(84 [ACET]) 0.099169 0.052952 0.011870 0.116436
Equity(88 [ACI]) -0.521502 -0.239213 NaN NaN
Equity(100 [IEP]) 0.085109 -0.189946 -0.030862 -0.052594
Equity(106 [ACU]) -0.001139 0.108784 NaN NaN
Equity(110 [ACXM]) -0.215818 0.125317 -0.090749 -0.029503
Equity(112 [ACY]) -0.347412 -0.330136 NaN NaN
Equity(114 [ADBE]) -0.038052 0.010974 0.005855 0.103282
Equity(117 [AEY]) -0.163338 -0.005546 -0.030275 -0.004307
Equity(122 [ADI]) -0.053260 0.048916 0.152919 0.006643
Equity(128 [ADM]) 0.163082 -0.016993 NaN NaN
Equity(153 [AE]) -0.379996 -0.067920 NaN NaN
Equity(162 [AEPI]) 0.115119 0.304771 -0.013461 -0.009709
Equity(168 [AET]) 0.017074 0.038345 NaN NaN
Equity(197 [AGCO]) -0.183114 -0.063562 NaN NaN
Equity(205 [AGN]) 0.036915 0.125451 NaN NaN
Equity(216 [HES]) -0.007906 -0.316231 NaN NaN
Equity(225 [AHPI]) -0.142382 -0.341959 0.056727 -0.112767
Equity(247 [AIN]) -0.053910 0.013979 NaN NaN
Equity(253 [AIR]) -0.080217 0.057551 NaN NaN
Equity(270 [AKRX]) 0.132418 -0.035143 0.275758 -0.108393
... ... ... ... ...
Equity(48506 [ZSAN]) NaN NaN NaN NaN
Equity(48519 [TCON]) NaN NaN NaN NaN
Equity(48520 [LENS]) NaN NaN NaN NaN
Equity(48532 [ENTL]) NaN NaN NaN NaN
Equity(48534 [FLKS]) NaN NaN NaN NaN
Equity(48545 [AVGR]) NaN NaN NaN NaN
Equity(48547 [ONCE]) NaN NaN NaN NaN
Equity(48554 [MDVX]) NaN NaN NaN NaN
Equity(48602 [ITEK]) NaN NaN NaN NaN
Equity(48629 [INOV]) NaN NaN NaN -0.061799
Equity(48635 [BLPH]) NaN NaN NaN -0.223671
Equity(48732 [QPAC]) NaN NaN NaN NaN
Equity(48781 [CHEK]) NaN NaN NaN NaN
Equity(48789 [STDY]) NaN NaN NaN NaN
Equity(48804 [TANH]) NaN NaN NaN 0.828841
Equity(48823 [SEDG]) NaN NaN NaN NaN
Equity(48872 [KRNT]) NaN NaN NaN NaN
Equity(48926 [XBIT]) NaN NaN NaN NaN
Equity(48934 [ETSY]) NaN NaN NaN NaN
Equity(48981 [APIC]) NaN NaN NaN NaN
Equity(48999 [AAPC]) NaN NaN NaN NaN
Equity(49010 [TBRA]) NaN NaN NaN NaN
Equity(49024 [BOJA]) NaN NaN NaN NaN
Equity(49096 [PTXP]) NaN NaN NaN NaN
Equity(49126 [WING]) NaN NaN NaN NaN
Equity(49131 [OESX]) NaN NaN NaN NaN
Equity(49155 [FOGO]) NaN NaN NaN NaN
Equity(49179 [CETX]) NaN NaN NaN NaN
Equity(49196 [PIRS]) NaN NaN NaN NaN
Equity(49200 [YECO]) NaN NaN NaN NaN

3391 rows × 4 columns

In [147]:
returns_daily = ((price_history - price_history.shift(1, axis=0)) / price_history.shift(1, axis=0)).iloc[1:]
n = len(returns_daily)
sigma = returns_daily.sub(returns_daily.mean()).pow(2).sum().multiply(252.0/(n-1.0)).pow(0.5)
sigma.describe()
Out[147]:
count    3391.000000
mean        0.411575
std         0.725116
min         0.000000
25%         0.218728
50%         0.320814
75%         0.491748
max        37.450606
dtype: float64
In [148]:
sp500_divisor = 9350070273.0
sp500_market_value = sp500_divisor * prices_sp[-1] * 10.0
rsize = np.log(fund_df0.loc['market_cap'] / sp500_market_value)
rsize
Out[148]:
security
Equity(24 [AAPL])       -5.582449
Equity(31 [ABAX])      -12.009625
Equity(41 [ARCB])      -12.344549
Equity(53 [ABMD])      -11.151193
Equity(67 [ADSK])       -9.700635
Equity(69 [ACAT])      -12.984183
Equity(84 [ACET])      -12.478686
Equity(100 [IEP])       -9.790892
Equity(110 [ACXM])     -11.812795
Equity(114 [ADBE])      -8.457946
Equity(117 [AEY])      -15.906566
Equity(122 [ADI])       -9.148985
Equity(162 [AEPI])     -13.437393
Equity(225 [AHPI])     -16.634954
Equity(270 [AKRX])     -10.570557
Equity(283 [ALCO])     -13.119634
Equity(301 [ALKS])      -9.896213
Equity(311 [ALOG])     -12.175662
Equity(312 [ALOT])     -14.420521
Equity(328 [ALTR])      -9.438440
Equity(337 [AMAT])      -8.982798
Equity(351 [AMD])      -11.522515
Equity(368 [AMGN])      -7.387071
Equity(371 [HWAY])     -12.994793
Equity(393 [AMSC])     -14.760516
Equity(397 [AMSW_A])   -13.457231
Equity(405 [AMWD])     -12.296432
Equity(450 [CLFD])     -13.689901
Equity(474 [APOG])     -11.739320
Equity(508 [AIRM])     -11.659198
                          ...    
Equity(48506 [ZSAN])   -14.602076
Equity(48519 [TCON])   -14.064320
Equity(48520 [LENS])   -14.409942
Equity(48532 [ENTL])   -12.886211
Equity(48534 [FLKS])   -13.227404
Equity(48545 [AVGR])   -14.013865
Equity(48547 [ONCE])   -11.790897
Equity(48554 [MDVX])   -15.327752
Equity(48602 [ITEK])   -14.681279
Equity(48629 [INOV])   -10.751458
Equity(48635 [BLPH])   -14.505670
Equity(48732 [QPAC])   -13.008478
Equity(48781 [CHEK])   -15.704316
Equity(48789 [STDY])   -14.852006
Equity(48804 [TANH])   -13.119361
Equity(48823 [SEDG])   -11.774132
Equity(48872 [KRNT])   -13.056569
Equity(48926 [XBIT])   -12.675412
Equity(48934 [ETSY])   -11.710206
Equity(48981 [APIC])   -13.356347
Equity(48999 [AAPC])   -14.422479
Equity(49010 [TBRA])   -13.339275
Equity(49024 [BOJA])   -12.343955
Equity(49096 [PTXP])   -12.432482
Equity(49126 [WING])   -12.389695
Equity(49131 [OESX])   -14.781675
Equity(49155 [FOGO])   -12.656889
Equity(49179 [CETX])   -15.829426
Equity(49196 [PIRS])   -14.320257
Equity(49200 [YECO])   -14.802918
Name: market_cap, dtype: float64
In [149]:
adjusted_book_value= fund_df0.loc['total_assets'] + 0.1*(fund_df0.loc['market_cap'] - fund_df0.loc['total_assets'])
#adjusted_book_value
mb = mta.div(adjusted_book_value, axis=0)
mb
Out[149]:
2014-10 2015-01 2015-04 2015-07
Equity(2 [AA]) NaN NaN NaN NaN
Equity(24 [AAPL]) 2.058833 2.256464 2.507262 2.512471
Equity(31 [ABAX]) 3.178980 3.625543 4.164661 3.279090
Equity(41 [ARCB]) 1.007650 1.211204 1.016184 0.912303
Equity(52 [ABM]) NaN NaN NaN NaN
Equity(53 [ABMD]) 1.729935 2.690218 5.179204 4.777641
Equity(62 [ABT]) NaN NaN NaN NaN
Equity(67 [ADSK]) 2.384184 2.645376 2.591819 2.302103
Equity(69 [ACAT]) 1.394476 1.375044 1.413978 1.351365
Equity(76 [TAP]) NaN NaN NaN NaN
Equity(84 [ACET]) 1.341096 1.479610 1.498061 1.667325
Equity(88 [ACI]) NaN NaN NaN NaN
Equity(100 [IEP]) 0.449155 0.661664 0.401163 0.663124
Equity(106 [ACU]) NaN NaN NaN NaN
Equity(110 [ACXM]) 1.223680 1.414453 1.309856 1.293189
Equity(112 [ACY]) NaN NaN NaN NaN
Equity(114 [ADBE]) 2.512963 2.679915 2.733336 3.040975
Equity(117 [AEY]) 0.578637 0.596368 0.578587 0.577907
Equity(122 [ADI]) 2.210912 2.160385 2.506265 2.557963
Equity(128 [ADM]) NaN NaN NaN NaN
Equity(153 [AE]) NaN NaN NaN NaN
Equity(162 [AEPI]) 1.122517 1.332738 1.279446 1.235083
Equity(168 [AET]) NaN NaN NaN NaN
Equity(197 [AGCO]) NaN NaN NaN NaN
Equity(205 [AGN]) NaN NaN NaN NaN
Equity(216 [HES]) NaN NaN NaN NaN
Equity(225 [AHPI]) 0.669348 0.503675 0.533496 0.481011
Equity(247 [AIN]) NaN NaN NaN NaN
Equity(253 [AIR]) NaN NaN NaN NaN
Equity(270 [AKRX]) 1.993577 2.292580 2.975243 2.750594
... ... ... ... ...
Equity(48506 [ZSAN]) NaN NaN NaN 1.501602
Equity(48519 [TCON]) NaN NaN NaN 2.106520
Equity(48520 [LENS]) NaN NaN NaN NaN
Equity(48532 [ENTL]) NaN NaN NaN 3.744567
Equity(48534 [FLKS]) NaN NaN NaN NaN
Equity(48545 [AVGR]) NaN NaN NaN 2.148564
Equity(48547 [ONCE]) NaN NaN NaN NaN
Equity(48554 [MDVX]) NaN NaN NaN 2.339824
Equity(48602 [ITEK]) NaN NaN NaN 1.732600
Equity(48629 [INOV]) NaN NaN 3.515777 3.409941
Equity(48635 [BLPH]) NaN NaN NaN NaN
Equity(48732 [QPAC]) NaN NaN NaN 1.209220
Equity(48781 [CHEK]) NaN NaN NaN NaN
Equity(48789 [STDY]) NaN NaN NaN 1.297160
Equity(48804 [TANH]) NaN NaN 1.620380 3.630775
Equity(48823 [SEDG]) NaN NaN NaN 3.673104
Equity(48872 [KRNT]) NaN NaN NaN NaN
Equity(48926 [XBIT]) NaN NaN NaN 5.346108
Equity(48934 [ETSY]) NaN NaN NaN 3.494180
Equity(48981 [APIC]) NaN NaN NaN 1.888638
Equity(48999 [AAPC]) NaN NaN NaN 1.260786
Equity(49010 [TBRA]) NaN NaN NaN 4.340456
Equity(49024 [BOJA]) NaN NaN NaN 1.880212
Equity(49096 [PTXP]) NaN NaN NaN 2.761891
Equity(49126 [WING]) NaN NaN NaN 5.124804
Equity(49131 [OESX]) NaN NaN NaN 0.884073
Equity(49155 [FOGO]) NaN NaN NaN 1.808909
Equity(49179 [CETX]) NaN NaN NaN 1.775952
Equity(49196 [PIRS]) NaN NaN NaN 4.368844
Equity(49200 [YECO]) NaN NaN NaN 1.158331

3391 rows × 4 columns

In [150]:
capped_prices = prices.iloc[:,-1]
capped_prices[capped_prices > 15] = 15
log_prices = np.log(capped_prices)
log_prices
Out[150]:
Equity(2 [AA])               NaN
Equity(24 [AAPL])       2.708050
Equity(31 [ABAX])       2.708050
Equity(41 [ARCB])       2.708050
Equity(52 [ABM])             NaN
Equity(53 [ABMD])       2.708050
Equity(62 [ABT])             NaN
Equity(67 [ADSK])       2.708050
Equity(69 [ACAT])       2.708050
Equity(76 [TAP])             NaN
Equity(84 [ACET])       2.708050
Equity(88 [ACI])             NaN
Equity(100 [IEP])       2.708050
Equity(106 [ACU])            NaN
Equity(110 [ACXM])      2.708050
Equity(112 [ACY])            NaN
Equity(114 [ADBE])      2.708050
Equity(117 [AEY])       0.867100
Equity(122 [ADI])       2.708050
Equity(128 [ADM])            NaN
Equity(153 [AE])             NaN
Equity(162 [AEPI])      2.708050
Equity(168 [AET])            NaN
Equity(197 [AGCO])           NaN
Equity(205 [AGN])            NaN
Equity(216 [HES])            NaN
Equity(225 [AHPI])      0.365754
Equity(247 [AIN])            NaN
Equity(253 [AIR])            NaN
Equity(270 [AKRX])      2.708050
                          ...   
Equity(48506 [ZSAN])    2.001480
Equity(48519 [TCON])    2.525729
Equity(48520 [LENS])    2.081938
Equity(48532 [ENTL])    2.708050
Equity(48534 [FLKS])    2.708050
Equity(48545 [AVGR])    2.564949
Equity(48547 [ONCE])    2.708050
Equity(48554 [MDVX])    1.374019
Equity(48602 [ITEK])    1.609438
Equity(48629 [INOV])    2.708050
Equity(48635 [BLPH])    2.020222
Equity(48732 [QPAC])    2.296567
Equity(48781 [CHEK])    1.000632
Equity(48789 [STDY])    1.635106
Equity(48804 [TANH])    2.708050
Equity(48823 [SEDG])    2.708050
Equity(48872 [KRNT])    2.670002
Equity(48926 [XBIT])    2.708050
Equity(48934 [ETSY])    2.656757
Equity(48981 [APIC])    2.356885
Equity(48999 [AAPC])    2.320425
Equity(49010 [TBRA])    2.708050
Equity(49024 [BOJA])    2.708050
Equity(49096 [PTXP])    2.708050
Equity(49126 [WING])    2.708050
Equity(49131 [OESX])    1.213389
Equity(49155 [FOGO])    2.708050
Equity(49179 [CETX])    1.340250
Equity(49196 [PIRS])    1.381282
Equity(49200 [YECO])    1.819699
Name: 2015-07, dtype: float64
In [151]:
nimtaavg = 0.5333*nimta.iloc[:,-1] + 0.2666*nimta.iloc[:,-2] + 0.1333*nimta.iloc[:,-3] + 0.0666*nimta.iloc[:,-4]
nimtaavg
Out[151]:
Equity(2 [AA])               NaN
Equity(24 [AAPL])       0.018006
Equity(31 [ABAX])       0.006987
Equity(41 [ARCB])       0.006787
Equity(52 [ABM])             NaN
Equity(53 [ABMD])       0.020260
Equity(62 [ABT])             NaN
Equity(67 [ADSK])       0.001280
Equity(69 [ACAT])      -0.016440
Equity(76 [TAP])             NaN
Equity(84 [ACET])       0.009022
Equity(88 [ACI])             NaN
Equity(100 [IEP])      -0.001899
Equity(106 [ACU])            NaN
Equity(110 [ACXM])     -0.001652
Equity(112 [ACY])            NaN
Equity(114 [ADBE])      0.002751
Equity(117 [AEY])       0.010880
Equity(122 [ADI])       0.008799
Equity(128 [ADM])            NaN
Equity(153 [AE])             NaN
Equity(162 [AEPI])      0.012343
Equity(168 [AET])            NaN
Equity(197 [AGCO])           NaN
Equity(205 [AGN])            NaN
Equity(216 [HES])            NaN
Equity(225 [AHPI])     -0.035671
Equity(247 [AIN])            NaN
Equity(253 [AIR])            NaN
Equity(270 [AKRX])      0.004196
                          ...   
Equity(48506 [ZSAN])         NaN
Equity(48519 [TCON])         NaN
Equity(48520 [LENS])         NaN
Equity(48532 [ENTL])         NaN
Equity(48534 [FLKS])         NaN
Equity(48545 [AVGR])         NaN
Equity(48547 [ONCE])         NaN
Equity(48554 [MDVX])         NaN
Equity(48602 [ITEK])         NaN
Equity(48629 [INOV])         NaN
Equity(48635 [BLPH])         NaN
Equity(48732 [QPAC])         NaN
Equity(48781 [CHEK])         NaN
Equity(48789 [STDY])         NaN
Equity(48804 [TANH])         NaN
Equity(48823 [SEDG])         NaN
Equity(48872 [KRNT])         NaN
Equity(48926 [XBIT])         NaN
Equity(48934 [ETSY])         NaN
Equity(48981 [APIC])         NaN
Equity(48999 [AAPC])         NaN
Equity(49010 [TBRA])         NaN
Equity(49024 [BOJA])         NaN
Equity(49096 [PTXP])         NaN
Equity(49126 [WING])         NaN
Equity(49131 [OESX])         NaN
Equity(49155 [FOGO])         NaN
Equity(49179 [CETX])         NaN
Equity(49196 [PIRS])         NaN
Equity(49200 [YECO])         NaN
dtype: float64
In [152]:
exretavg = 0.5333*exret.iloc[:,-1] + 0.2666*exret.iloc[:,-2] + 0.1333*exret.iloc[:,-3] + 0.0666*exret.iloc[:,-4]
exretavg
Out[152]:
Equity(2 [AA])               NaN
Equity(24 [AAPL])      -0.087639
Equity(31 [ABAX])      -0.078452
Equity(41 [ARCB])      -0.128435
Equity(52 [ABM])             NaN
Equity(53 [ABMD])       0.169046
Equity(62 [ABT])             NaN
Equity(67 [ADSK])      -0.072847
Equity(69 [ACAT])      -0.037264
Equity(76 [TAP])             NaN
Equity(84 [ACET])       0.078923
Equity(88 [ACI])             NaN
Equity(100 [IEP])      -0.055928
Equity(106 [ACU])            NaN
Equity(110 [ACXM])     -0.037596
Equity(112 [ACY])            NaN
Equity(114 [ADBE])      0.055570
Equity(117 [AEY])      -0.021986
Equity(122 [ADI])       0.047284
Equity(128 [ADM])            NaN
Equity(153 [AE])             NaN
Equity(162 [AEPI])      0.039526
Equity(168 [AET])            NaN
Equity(197 [AGCO])           NaN
Equity(205 [AGN])            NaN
Equity(216 [HES])            NaN
Equity(225 [AHPI])     -0.100081
Equity(247 [AIN])            NaN
Equity(253 [AIR])            NaN
Equity(270 [AKRX])      0.019846
                          ...   
Equity(48506 [ZSAN])         NaN
Equity(48519 [TCON])         NaN
Equity(48520 [LENS])         NaN
Equity(48532 [ENTL])         NaN
Equity(48534 [FLKS])         NaN
Equity(48545 [AVGR])         NaN
Equity(48547 [ONCE])         NaN
Equity(48554 [MDVX])         NaN
Equity(48602 [ITEK])         NaN
Equity(48629 [INOV])         NaN
Equity(48635 [BLPH])         NaN
Equity(48732 [QPAC])         NaN
Equity(48781 [CHEK])         NaN
Equity(48789 [STDY])         NaN
Equity(48804 [TANH])         NaN
Equity(48823 [SEDG])         NaN
Equity(48872 [KRNT])         NaN
Equity(48926 [XBIT])         NaN
Equity(48934 [ETSY])         NaN
Equity(48981 [APIC])         NaN
Equity(48999 [AAPC])         NaN
Equity(49010 [TBRA])         NaN
Equity(49024 [BOJA])         NaN
Equity(49096 [PTXP])         NaN
Equity(49126 [WING])         NaN
Equity(49131 [OESX])         NaN
Equity(49155 [FOGO])         NaN
Equity(49179 [CETX])         NaN
Equity(49196 [PIRS])         NaN
Equity(49200 [YECO])         NaN
dtype: float64
In [153]:
# Descriptive Statistics

nimta_stats = nimta.iloc[:,-1].describe()
nimta_stats.name = 'NIMTA'

tlmta_stats = tlmta.iloc[:,-1].describe()
tlmta_stats.name = 'TLMTA'

exret_stats = exret.iloc[:,-1].describe()
exret_stats.name = 'EXRET'

rsize_stats = rsize.describe()
rsize_stats.name = 'RSIZE'

sigma_stats = sigma.describe()
sigma_stats.name = 'SIGMA'

cashmta_stats = cashmta.iloc[:,-1].describe()
cashmta_stats.name = 'CASHMTA'

mb_stats = mb.iloc[:,-1].describe()
mb_stats.name = 'MB'

log_prices_stats = log_prices.describe()
log_prices_stats.name = 'PRICE'

pd.concat([nimta_stats, tlmta_stats, exret_stats, rsize_stats, sigma_stats, cashmta_stats, mb_stats, log_prices_stats], axis=1)

# Summary Statistics as reported in the Paper (Table II)
#        NIMTA   TLMTA    EXRET     RSIZE   SIGMA  CASHMTA     MB   PRICE
# Mean   0.000   0.445   -0.011   -10.456   0.562    0.084  2.041   2.019
# Median 0.006   0.427   -0.009   -10.570   0.471    0.045  1.557   2.474
Out[153]:
NIMTA TLMTA EXRET RSIZE SIGMA CASHMTA MB PRICE
count 1677.000000 1678.000000 1698.000000 1759.000000 3391.000000 1678.000000 1678.000000 1759.000000
mean -0.016913 0.159873 -0.015058 -13.030187 0.411575 0.117977 1.934325 2.054174
std 0.064114 0.207548 0.445168 1.961416 0.725116 0.133794 1.226745 0.929848
min -0.967017 0.000000 -13.867345 -19.047085 0.000000 0.000019 0.139690 -3.901751
25% -0.023267 0.003545 -0.117184 -14.439297 0.218728 0.029825 1.065849 1.608437
50% -0.000092 0.076584 -0.003086 -13.047199 0.320814 0.076411 1.563852 2.642622
75% 0.008150 0.234537 0.111573 -11.762866 0.491748 0.159112 2.525201 2.708050
max 0.957092 0.994117 2.854490 -5.582449 37.450606 0.962050 7.986402 2.708050
In [154]:
lpfd = -20.12*nimtaavg +1.60*tlmta.iloc[:,-1] -7.88*exretavg +1.55*sigma -0.005*rsize -2.27*cashmta.iloc[:,-1] +0.07*mb.iloc[:,-1] -0.09*log_prices -8.87
lpfd
Out[154]:
Equity(2 [AA])               NaN
Equity(24 [AAPL])      -8.253571
Equity(31 [ABAX])      -8.040403
Equity(41 [ARCB])      -7.706793
Equity(52 [ABM])             NaN
Equity(53 [ABMD])      -9.779067
Equity(62 [ABT])             NaN
Equity(67 [ADSK])      -8.112464
Equity(69 [ACAT])      -8.061729
Equity(76 [TAP])             NaN
Equity(84 [ACET])      -9.088013
Equity(88 [ACI])             NaN
Equity(100 [IEP])      -7.816340
Equity(106 [ACU])            NaN
Equity(110 [ACXM])     -8.079833
Equity(112 [ACY])            NaN
Equity(114 [ADBE])     -9.047704
Equity(117 [AEY])      -8.643025
Equity(122 [ADI])      -9.117888
Equity(128 [ADM])            NaN
Equity(153 [AE])             NaN
Equity(162 [AEPI])     -8.396369
Equity(168 [AET])            NaN
Equity(197 [AGCO])           NaN
Equity(205 [AGN])            NaN
Equity(216 [HES])            NaN
Equity(225 [AHPI])     -6.817600
Equity(247 [AIN])            NaN
Equity(253 [AIR])            NaN
Equity(270 [AKRX])     -7.964460
                          ...   
Equity(48506 [ZSAN])         NaN
Equity(48519 [TCON])         NaN
Equity(48520 [LENS])         NaN
Equity(48532 [ENTL])         NaN
Equity(48534 [FLKS])         NaN
Equity(48545 [AVGR])         NaN
Equity(48547 [ONCE])         NaN
Equity(48554 [MDVX])         NaN
Equity(48602 [ITEK])         NaN
Equity(48629 [INOV])         NaN
Equity(48635 [BLPH])         NaN
Equity(48732 [QPAC])         NaN
Equity(48781 [CHEK])         NaN
Equity(48789 [STDY])         NaN
Equity(48804 [TANH])         NaN
Equity(48823 [SEDG])         NaN
Equity(48872 [KRNT])         NaN
Equity(48926 [XBIT])         NaN
Equity(48934 [ETSY])         NaN
Equity(48981 [APIC])         NaN
Equity(48999 [AAPC])         NaN
Equity(49010 [TBRA])         NaN
Equity(49024 [BOJA])         NaN
Equity(49096 [PTXP])         NaN
Equity(49126 [WING])         NaN
Equity(49131 [OESX])         NaN
Equity(49155 [FOGO])         NaN
Equity(49179 [CETX])         NaN
Equity(49196 [PIRS])         NaN
Equity(49200 [YECO])         NaN
dtype: float64
In [155]:
# PFD (Probability of Financial Distress). The probability of financial distress ranges between zero and 100 percent.
# Zero implies no probability of financial distress in the next 12 months, while 100 percent suggests certain financial distress.
pfd = 1.0 / (1.0 + np.exp(-lpfd))
distressed_companies = pfd[pfd > 0.50].order(ascending=False)
for equity in distressed_companies.index:
    print "%-5s %-40s %.2f%%" % (equity.symbol, equity.asset_name, 100.0*distressed_companies[equity])
LOCM  LOCAL CORP                               100.00%
LOOK  LOOKSMART LTD                            99.91%
USEG  U S ENERGY CORP                          99.91%
DXM   DEX MEDIA INC                            99.50%
ASTI  ASCENT SOLAR TECHNOLOGIES INC            99.47%
RLJE  RLJ ENTERTAINMENT INC                    98.43%
VPCO  VAPOR CORP                               97.99%
XGTI  XG TECHNOLOGY INC                        94.93%
VGGL  VIGGLE INC                               91.37%
VRNG  VRINGO INC                               89.47%
INPH  INTERPHASE CORP                          88.03%
HERO  HERCULES OFFSHORE INC                    86.01%
WRES  WARREN RESOURCES INC                     82.82%
PHMD  PHOTOMEDEX INC                           82.47%
PRSN  PERSEON CORP                             78.96%
JOEZ  JOE'S JEANS INC                          76.87%
SWSH  SWISHER HYGIENE INC                      74.22%
CLRX  COLLABRX INC                             62.89%
SPEX  SPHERIX INC                              58.80%
ADAT  AUTHENTIDATE HOLDING CORP                57.40%
ESCR  ESCALERA RESOURCES CO                    54.40%
NETE  NET ELEMENT INC                          53.01%
In [ ]: