Month: May 2017

The Cost of Cowardice


Alternate title: How I Learned to Stop Worrying and Love the Bomb

I am a fairly risk averse person, which often leads me to making sub-optimal decisions and living in a little bit of regret. I also try to be as rational as possible, which leads me to analyze every little or big decision that I want to make, and in most cases eventually arrive at a good understanding of my choices. This then devolves into a self harassment because I am unable to take the riskier routes, even if they overshoot in the Expected Value department.

This can have pretty serious long term consequences, depending on the decision type. Let’s take two seemingly unconnected examples to drive home the point.

A. Relationships
Relationships are tough. They are difficult systems to analyze because you are both the observer and the observed, and your observations will affect the system you are trying to rationally figure out. So when trying to do fault analysis on your own relationship, you have to be aware of the fact that any reflexive process will only lead you to an incomplete truth. That does not mean that honest analysis of such a situation is useless, it only means that the inherent uncertainty associated with whatever conclusions you make can throw off your confidence and lead to a lot of second guessing (in a lot of cases, it should).
Let’s say you analyze the issues in your relationship and arrive at some reasonable conclusions that seem to be holding up in both back and forward time testing. In a lot of cases, the conclusions you arrive at will have you facing some tough choices, like ending a relationship, or changing important things about it, and/or having some difficult conversations.
In such cases, what do you do? The optimal choice is in front of you, but there is hesitation in your mind because you are not totally certain (and you’ll never be) of the quality of your decision. And since it is a difficult conversation to have, you chicken out. The cost of prolonging such decisions are two fold:
a. you stay miserable and the issues never get solved, and usually the pain only intensifies with time (compounded pain, we can call it)
b. in case you have arrived at an incorrect conclusion, there is very little correction that you can do unless you get more information. The best way to get more information in a dynamic two (usually) people system is to confront the other person and get them involved in the process as well

B. Finance
The other case is money. Money is a tricky beast, you never know if you have too little, too much, just right, but the one thing that’s certain is that you would always like more (assume no change in effort). Money is also the place where you get one of the most objective feedback of your decisions- you will have very little if you are not making or saving enough. You can also veer off in the other direction where you are stashing way too much and not putting it to proper use and still living like a poor person with no way of ever attaining full financial freedom (where you don’t need to work for money because your money makes enough money for you).
In my case, it took me way too long to get the courage to move my money from a shitty 0% yield savings account to a mix between investing and deposit in a high yield savings.
The costs are clear, because with investing, the most important thing is time. The more time you give your money to grow, the more it will grow (compounded gain, as many call it). Again, the fear of the unknown, even though it is well documented to be the better choice, leads you to sub-optimal decisions that cost you real money in the long term. It can be massive amounts, a couple year’s wait can cost you as much as 50% of what you didn’t invest in that time (over 30 years).

(Shameless advertising alert:
By the way, Wealthfront is where my money is at, and they make it easy to get started in case you are also stuck in a similar position as the old me. Sign up using that link and get yourself $15K managed for free
)

Where do we go now but nowhere?
Once I realized that I had been falling into this trap over and over again, I had to figure out a way to escape it. My solution isn’t ingenious in any way, but it doesn’t have to be. The thing is that I only have to perform better than the significantly worse things that I just described above. It would be great to perform much better though, and I have devised a plan for that as well.

The solution is borrowed from most desensitization practices. The idea is to slowly expose yourself to what you are afraid of in minute quantities at first, and then slowly increase the exposure. So if you are afraid to talk about a touchy personality flaw of the person you are in a relationship with, try slowly introducing them to the idea by occasionally pointing it out in the context of other relationships or your own. If they are receptive, it can be over with before you even realize. In case of money, start by saving a fixed small amount over your current saving every month if you can. If your problem is lack of investing, try investing small amounts at the beginning with tools like Acorns, Wealthfront or Betterment. Over time, as you get comfortable, increase both the frequency and the amounts.

Where you can really accelerate into hyperdrive is to draw parallels between these seemingly different situations and accelerate the rate of your desensitization by not only having a regular speed of increased exposure, but a regular speed at which you increase the speed too. You will realize that you will gain confidence to take more risky bets (with higher Expected Value) in general and that will result in you wasting less time in other spheres. If this connect isn’t drawn, you will be “reinventing the wheel” (definitely the most cringe worthy cliche phrase uttered on this blog) every time.
When you realize that there isn’t much to lose when you invest in the markets for example, and the only thing that is preventing you from taking that step is a fear/dread/aversion of the unknown, you realize that the same thing is preventing you from asking out that cute barista who always seems to be super nice to you, and you can only come to the conclusion that life can only get better if risks with low downside and high upside are embraced.

Go. Do.

Citibike: Analyze yourself!


In the 5 years that I have lived in NYC, the biggest improvement anything’s made to my quality of life has been Citibike. I like being on wheels, I like being energy efficient, I like the wind in my face, I like my freedom of commute (a regular bike binds itself to you), and I like that it saves my trip data! I like to think I am a Fastridahhh, but we are not always what we think we are. So by baselining myself against this analysis, I wanted to see where I actually truly lie.

The task was simple, get the lat/long of my start and end citibike stations, use Google Distance Matrix API to figure out the biking distance between the two locations, use the time from my citibike data, and get my average speed and see how it changes with distance etc.

Once the stew was cooked, the results were fairly interesting.
My average speed was 13.7 kmph (8.5 mph), but I have done no outlier removal or anything because lazy. The median was pretty much exactly the same as average (13.56 kmph), indicating an even distro. This was a little disappointing frankly, I was only slightly faster than the overall average according to the wider analysis (8.3 mph) and my self image rightly got punched back into its place. I can make up excuses for why it is slower than I feel I ride at, but that is just being dishonest (I have already thought of three, including shifting the blame on someone else).

Most of my trips are short distances that are annoying to walk (1-2 km), with nearly 50% falling in that range, the rest are equally distributed across the other buckets.

Distance Range # Trips Average time (min) Average Speed
0 to 0.5K 8% 1.53 8.24
0.5K to 1K 21% 3.87 11.90
1K to 2K 48% 5.89 13.09
2K to 5K 22% 11.31 14.15
Greater than 5K 1% 16.12 18.84
Grand Total 100% 6.38 13.36

I also wanted to look at how speed varies with distance, as you would expect it to be highly correlated (they were, with a correlation coefficient of 0.4). But I also created a polynomial best fit line with an order of two (anything higher is just overfitting and the data seems to follow a parabolic pattern rather than linear). The R-squared sits nicely (for such unclean data with so few datapoints, especially for higher distances) at 0.265, which vindicates my hunch about it being a parabolic curve. Here’s the pretty chart for your pretty eyes to peruse:

Speed v Distance

If you want to do it too:
Please do, and let me know what your results look like.

Getting the lat/longs:
Surprisingly, Citibike doesn’t have any place that you can get the lat/longs of stations from unless you distill it from their trip data. So I did that. And here’s the file for all you guys (updated till March 2017, includes Jersey City citibike locations)
Citibike Stations Lat Long

Using the Google Distance Matrix API:
I prefer Excel for small analysis, so wanted to write a VBA code that would get me the distance between two lat/long pairs. Here’s what I made, with a little help from my friends over at StackOverflow given that I don’t really know VBA. You can create a new module, paste this code there save it, and then use the function called getDist to get the distance between the lat/long of the locations (which you’ll need to vlookup from the station lat/long map that I shared earlier)

(WordPress is being a prick and not letting me format this properly, so please insert tabs at appropriate places)


Public Function getDist(orig_lat As Double, orig_Double As Double, end_lat As Double, end_long As Double) As String

Dim xhrRequest As XMLHTTP60
Dim domDoc As DOMDocument60
Dim domDoc2 As DOMDocument60
Dim nodes As IXMLDOMNodeList
Dim node As IXMLDOMNode

'You must acquire a google api key and enter it here
Dim googleKey As String
googleKey = "XXX" 'your api key here

'Send a "GET" request for place/textsearch
Set xhrRequest = New XMLHTTP60

Dim requrl As String
requrl = "https://maps.googleapis.com/maps/api/distancematrix/xml?origins=" & orig_lat & "," & orig_Double & _
"&destinations=" & end_lat & "," & end_long & "&mode=bicycling" & "&key=" & googleKey

xhrRequest.Open "GET", requrl
xhrRequest.send

'Save the response into a document
Set domDoc = New DOMDocument60
domDoc.LoadXML xhrRequest.responseText

'Find the first node that is called "distance" and is the child of the "result" node. The SelectSingleNode will pick the first result, as google can return multiple options
Set ixnlDistanceNodes = domDoc.SelectSingleNode("//distance/value")

If Not ixnlDistanceNodes Is Nothing Then
getDist = ixnlDistanceNodes.Text
Else
getDist = -1
End If

Set domDoc = Nothing
Set xhrRequest = Nothing

End Function