Many customers are unable to purchase solar home systems for lighting and phone charging without a financing option. For a customer to compare between the rate available from a microfinance lender and a company that provides in-house finance, they must compare the effective interest rates. M-KOPA advertises their deposit and daily payments online and the effective APR can be calculated from this.

device initial cost deposit daily payment
d10g ? 2500 KSH 40 KSH
d20g 17540 KSH 2999 KSH 50 KSH

The retail cost for the d.light d20g system is listed on Amazon as 199 USD. At an exchange rate of 87.7 KSH to 1 USD, the initial cost is 17540 KSH. I'm not aware of a published retail price for the d10g product.

From the daily payment, the loan length, and the initial cost I can calculate the equivalent daily interest rate for the loan that M-KOPA provides to their customers. This is done by creating the daily cash flow as a time series and finding the discount rate for which the net present value (NPV) is zero. This is implemented in the internal rate of return (IRR) function provided in many software packages.

In [1]:
import numpy as np
lanterns = {'d10g':{'price':0.0, 'daily':40., 'deposit':2500},
            'd20g':{'price':17540, 'daily':50., 'deposit':2999}}

# calculate APR as range

Initial payment

This is the difference between the assumed retail value and the deposit provided by the customer. This difference represents the balance that is being financed by M-KOPA.

In [2]:
lantern = 'd20g'
initial_payment = lanterns[lantern]['price'] - lanterns[lantern]['deposit']
print('Initial payment = {} KSH'.format(initial_payment))
Initial payment = 14541 KSH

Payment time series

I construct an array of one initial finance benefit followed by 365 daily payments.

In [3]:
# create a payment stream and calculate effective interest rate
payments = -lanterns[lantern]['daily'] * np.ones(366)

# initial price
payments[0] = lanterns[lantern]['price'] - lanterns[lantern]['deposit']

Interest rate calculation

I can calculate the effective daily interest rate by passing this time series to a function that calculates the internal rate of return (IRR).

In [4]:
daily_interest_rate = np.irr(payments)
print('daily interest rate {:.4f}'.format(daily_interest_rate))
daily interest rate 0.0013

Daily vs Yearly APR

The IRR function will return the daily interest rate. To get the effective annual interest rate, I multiply by 365.

In [5]:
# get APR from daily rate
interest_rate = daily_interest_rate * 365
print('Yearly APR: {:.2f}'.format(interest_rate))
Yearly APR: 0.47

This interest rate is higher than that offered by microfinance institutions reflecting the high costs to maintain the loan and collect payments.

Financing arrangements or insurance products that increase the loan terms will lower the monthly payments to consumers, allowing more to participate in the market.

In [5]: