Apr 30, 2015

Failure to Launch

Five months ago, I requested an invite to IBM Verse. I was hoping to demo the features they were heralding, and see how they all came together into what IBM was touting as the future of email.

I finally got my invite.

Here's an account of my experience getting up and running on IBM's new platform.

6:02 PM - IBM sends me an email inviting me to create my account. Yes! Let's take a look at this nirvana of email.
"Delightful". That word... I do not think it means what you think it means.
6:16 PM - I click the link and provide some basic information, and receive a message that my account is being created. I will get another email when it is ready. Within the next business day. Huh? Seems a little slow, but okay.

6:26 PM - IBM sends me another email. My account is almost ready! Nice! In only ten minutes, after setting my expectation for 24 hours. I just need to set a password. Which I probably could have done in the first step. But let's set that password!

7:36 PM - I click the link to set my password. Success! Sort of. They are in the process of setting my password. Not sure why it's not instant. Perhaps it's going on the block chain? Although I really hope not, it's one of my "good" passwords and we don't need to make a permanent record of that.

7:42 PM - Another email... my account is ready! Really ready this time. "Get ready for mail that understands you, for less clutter and more clarity, for connecting you to the people who matter most." Yes! I am ready!

7:59 PM - I sign in! And wait while the app loads... there are FOUR different loading interstitials, done in what I would call an "early Netscape-era motif":
  • Please wait...
  • Please wait, signing on...
  • Loading...
  • Loading IBM Verse...
Didn't expect that, but it must be loading something amazing! And then IBM Verse is loaded. I don't know if the site was engineered to play a desolate wind sound, or if I just imagine it. But I'm in, and I'm sure I'll have emails there in no time!
"Happiness is an empty inbox." Indeed.
8:05 PM - I set up my profile picture, take a look around, and quickly realize there's no way to link other email accounts. I will need to use my new IBM Verse email address in order to get any emails.

8:40 PM - After distracting myself with Coursera for a while, I head to the IBM Verse forums to confirm that there really is no way to link other email accounts. And there is no way. Unless I'm on a paid version of Verse.

As other people have said:
  • Agreed ... and confused: "Possibly I mistakenly thought VERSE was all about email consolidation."
  • Worst marketing strategy: "This is the worst marketing strategy ever. You tease us with a product that you claim is going to change the way email is used and then we cannot evaluate it fully unless we buy the full version. IBM, you have lost a potential customer. I will not even attempt to get my organization to consider verse."
9:44 PM - I realize I have never been more underwhelmed by a product launch. I go back to the site and take one last look at my inbox. The wind howls a bit louder. I realize that if "Happiness is an empty inbox" then I am going to be absolutely ecstatic with IBM Verse.

Feb 23, 2015

RightClickR!

After I took the Statistics One and Data Analysis series courses on Coursera last year, I told myself that I was going to stop doing statistical analysis in Excel. I had a good intro to R, and found that it made a lot of the analysis I did in Excel--from basic statistical analysis and exploratory visualization--extremely easy and quick. And it was reproducible.

But then I got lazy. I stopped exporting Excel files to CSV. I stopped loading those CSVs into R. And because of those two extra steps that I stopped doing, everything I learned in R became a little hazy.

There was really only one barrier to doing more in R and keeping my R skills fresh--getting those spreadsheets into R. So I quickly built RightClickR, a registry setting / batch file combo that lets me right-click on an Excel file and have it open up in R. All tabs get loaded into a dataframe in the format of xlsx.<tab name>. As I write that, I realized I should probably do some tab name cleansing, but that's a project for another day. Maybe Thursday.

Now just to get me some data!

As you might notice in the screenshot above, using RightClickR creates an R file corresponding to the Excel spreadsheet. This file will continue to be loaded each time you use RightClickR for that spreadsheet, and as a result is a good place to drop any munging you need to do on your data set.

If you're handy with batch / registry files and you spend time in Excel that you'd rather spend in R, maybe the files below will help you.

RightClickR.bat

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
@echo off
set RCR_RFILE=%~n1.R
set RCR_FILEPATH=%1
set RCR_PATH=%~p1
set RCR_NEWPATH=%RCR_FILEPATH:\=/%
if exist %RCR_PATH%%RCR_RFILE% goto launchR
echo library(xlsx) > %RCR_RFILE%
echo rcr_file ^<- '%RCR_NEWPATH%' >> %RCR_RFILE%
echo rcr_wb ^<- loadWorkbook(rcr_file) >> %RCR_RFILE%
echo rcr_sheets ^<- getSheets(rcr_wb) >> %RCR_RFILE%
echo for (rcr_s in 1:length(rcr_sheets)) { >> %RCR_RFILE%
echo   rcr_data ^<- read.xlsx(rcr_file,rcr_s) >> %RCR_RFILE%
echo   assign(paste("xlsx.",names(rcr_sheets[rcr_s]),sep=""),rcr_data) >> %RCR_RFILE%
echo } >> %RCR_RFILE%
echo remove(rcr_data) >> %RCR_RFILE%
:launchR
start C:\Progra~1\RStudio\bin\rstudio.exe %RCR_PATH%%RCR_RFILE%
:exit

And here's the reg file. The usual disclaimers about modifying your registry apply--if you don't know what you're doing you can bork things up, so only do this if you have done this before and are comfortable with making registry changes.

RightClickR.reg

1
2
3
4
5
6
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\OpenInR]

[HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\OpenInR\command]
@="C:\\\\Users\\\\bhayek\\\\Desktop\\\\Misc\\\\Personal\\\\Data\\\\RightClickR\\\\RightClickR.bat %1"

To adapt this for your setup:

  1. Install the xlsx package in R if you haven't already
  2. Change line 17 in RightClickR.bat to reflect the path to RStudio on your local machine
  3. Update line 6 in RightClickR.reg to reflect the path where you have saved the batch file; note that you will need to double-double-escape your backslashes; each backslash in your path will need to be replaced by four for the registry file
  4. Double-click RightClickR.reg file to make the registry changes and set up your right-click shortcut to R!

Dec 1, 2014

Email: There's got to be a better way!

When I first heard about Verse, IBM's new email product, I was excited. My excitement diminished as I reviewed the material posted on their site.

The content on the promo site was pretty light. On the landing page, there were three features demonstrated by animations; however these really just boiled down to joining / snoozing a meeting, filtering emails by sender, and viewing an org chart. They didn't preview any features that were truly innovative. They included the personas that were designed for, but offered only sound bites of what each persona would say about Verse rather than a deeper peak at some features that are most useful to each persona. I would have loved to learn more about the top five prioritization as opposed to just reading two personas talk about it.

And then there were the videos. I particularly appreciated them sprinkling infomercial elements across the playlist... an infomercial cliche ("There's got to be a better way!") as a title for one, and another cliche ("Today's tools just aren't up to the task!") and an infomercial-worthy still (below) in another. I don't know if it was intentional, but I'll give them the benefit of the doubt and applaud it.

Still from an IBM Verse promo video, or a 5-hour Energy ad?

But wait, there's more! In the videos, we also learned about Reply vs Reply All and heard one of their execs awkwardly string together some buzzwords ("Cloud! And mobile! And social! And analytics!")

Please IBM, you could have sold us on this a lot better.

Videos aside, there seemed to be nothing that revolutionary in the new offering. As I see it, some features that they highlighted already exist:
  • Contact Cards: These exist in Outlook under the same name
  • Web Preview: Exists in Outlook.com and Gmail, and in-message preview exists in Outlook
  • Team Analytics: This appears to just be a prettier version of the Organization feature in Outlook
  • Mute: Exists in Outlook as the extremely awesome Ignore function (more on that at another time). 
    Outlook Ignore / IBM Verse Mute
  • Faceted Search: Exists in Yahoo email, although it could use some tweaking. As it is, I rely on the advanced Search capabilities in Outlook (Search: from:charles subject:scope hasattachments:yes ext:pdf received:last month). It's fast and powerful.

So not so much a new way of working. but more just playing catch-up with those features. That said, some of the features they highlighted had potential:
  • Calendar Bar: This simple and elegant representation of your daily calendar at the bottom of the screen is a feature that I really like--this is definitely a great way to keep an eye on my day and join meetings quickly
Calendar Bar: So simple but so awesome.
  • Post to Blog: Although this feature could get some good use in the right setting, I can already easily add emails to our collaboration software at work (Jive) just by forwarding them
  • Prioritization: This was mentioned on the personas page, with the persona sound bites referencing top five lists... would love to learn more about this

So a few of the features they mention are interesting to me. I'll admit that I could be an outlier in that I don't see utility in the person-centric model they are using for Verse. Perhaps others are very excited about it.

Here's what IBM's competition is doing that they should incorporate into Verse if they haven't already:
Outlook.com Sweep... love this feature
  1. Outlook.com: Sweep: Keep just the most recent email or type of email from a given sender, or opt to automatically delete them after a certain time
  2. Gmail: Throwaway Email Addresses: Easily create disposable email accounts by using the + symbol after the username part of an email address. The only issue with Gmail's approach is having to manually create a filter to delete emails to that address if they start getting spam (this could easily be one-click).
  3. Google Inbox: Reminders & Assists: I haven't spent too much time with these features, but they have promise
Now, here's my wishlist for what I really want to see in my ultimate email app:
  1. Reply Required: Intelligence to track whether my email requires a reply and track whether I get one. I'm imagining some combination of Bayesian classifier and text analytics that looks for questions or key phrases to figure this out. I don't know if this is what might be suggested by the "Waiting On" section in IBM Verse... if so, very cool.
  2. Auto Delete / Archive: Intelligence to automatically delete or archive emails that have expired. For example, if I have an email about a server outage that happened last week, can't that be deleted automatically? Or if there was a 20% off sale that ends on December 1st, can't that be deleted once the sale has expired?
  3. Email Expiration: Slowly expire certain emails (e.g., newsletters, marketing emails, etc.), and present the expiring emails to me in an intuitive way so I know whether I'm about to lose an email for good.
Hopefully IBM will offer up more details on Verse and I'll get access so I can check it out for myself. I do hope that there is more than what they're currently sharing on the site and their videos. And hopefully we'll be seeing some truly great innovation in email, as I do agree with IBM that there's got to be a better way.

Nov 11, 2014

A Product Manager's Wishlist for ZipCar

As someone without a car who needs to regularly visit my client's office 60 miles from Boston, I'm a pretty frequent user of ZipCar. This means two things: I've seen the ups and downs of the car share service, and I've got a lot of time to ponder whatever pops in my head. If I'm hungry, that usually takes the form of recipes I invent that I never actually cook (probably for the best). But the other day, my mind turned to ZipCar.

It could be just a result of driving ZipCars more often, but I've noticed more issues in the last year than when I first started driving them. This ranges from minor annoyances--like cars that are missing their aux cable--to things that are more serious--like dangerously under-inflated tires and cars out of coolant.

I don't think I'm going to switch to a competitive car service anytime soon, but I did have some ideas on what would move the needle back up on the customer experience front. So ZipCar, here it is...

Automatic Fuel Reporting
Even this picture is enough to make me cringe.
creative commons licensed (BY-NC-ND) flickr photo by dmoola: http://flickr.com/photos/dmoola/730766000
I've never understood why I as a driver have to report a low gas tank. Although I know almost nothing about cars, I don't see why this can't be automatically figured out using the car's OBD port. They already have telemetry that reports mileage, and integration that lets you honk the horn from a mobile app, so it doesn't seem like a big leap for them to do this.

Assuming this is doable, if a member returns a car with under 1/4 tank, they would automatically get fined with part of that fine going to the next customer. This is a change from the current model, where ZipCar fines a customer if the next customer reports a low tank, but keeps the money. Although I assume this is done to prevent people from falsely reporting low gas to score some cash, it does nothing for the customer who could now be late because of the need to get gas.

Since I'm on it...

App-based Fuel Reporting
Let's assume there's a technical reason preventing automatic fuel reporting. In this case, I don't understand why I need to place a call and navigate a call menu to report low gas. If I'm in this situation, I'm already annoyed by low gas, so it should be as easy as possible for me to report it. Why not put a low-fuel reporting feature directly into the app, and have members snap a picture of the gas gauge to reduce false claims? This could be done in three taps in an app instead of time spent on a call.

Speaking of the app...

App-based Damage Reporting
I'll admit that I'm not the best at always doing the walk around to check for damage. But if I do the walk around and see something I need to report, I again need to call in, navigate a call menu, and then leave a voicemail to report the damage. Wouldn't it be easier if there was a Vine-like easy video capability in the app? I could just walk around the car while recording the video, and if I see anything, tap one more time to have the video sent to ZipCar HQ, and be on my way with a minimum of time lost.

App-based Reservation Notifications
This would rock.
Next, I'll suggest they take a play from the Uber playbook... the one that's not getting a ton of misdirected negative attention. Earlier this year, Uber switched from SMS to app notifications to notify passengers of the status of their. I love this change. My driver details are right in my notifications drawer, so it's easy for me to check the model and license plate of the car that's picking me up.

ZipCar is still relying on SMS, which reminds you of the car name, location, and reservation time either 36 hours or one hour ahead of your reservation. The 36 hour notification is fine as is--it has reminded me to cancel cars I didn't need anymore without getting charged--but I think the one hour reminder could use some work. Given that the names of ZipCars aren't always visible, and given also that I have a near complete inability to distinguish between cars using anything other than color, why not pop up a notification with the reservation details PLUS the car color and license plate? This should also reduce the scenarios where people take the wrong car by accident, which I'm sure causes headaches for both members and ZipCar staff.

ZipCar Loyalty Program
Fake made-up ZipCar elite membership card
I'm using PowerPoint as my image
 editing tool of choice, so be nice.
 
Now, for those members who use ZipCar a lot, how about turning the rumored loyalty program into a reality? This would be a good way to reward heavy users and even out all the issues they run into. I'm all about tying it into some type of good karma program to reward drivers who keep the gas tank filled and perhaps even get the car washed every now and then. It wouldn't take much... maybe just a free two-hour rental here and there to make errand running a little sweeter...

Something for the Techs
5.8 pounds of 100 PSI love. Rowr.
Since it's not all about me, here's something for the techs... so they can keep the tires full... so I'm not riding around on dramatically under-inflated tires. Fine, it is all about me.

That sexy beast you see to the left is just $44 for a 4.5 star pump. Add it to the tech kit, and we all win--properly inflated tires, a safer ride, and better gas mileage.

So ZipCar, there is my wishlist. PS. Christmas is coming, and I've been a very good boy.

Sep 23, 2014

#DataEast14!

After not doing much on the data science front for quite a while, I'm excited to be attending the DataEast14 Big Data Innovation conference here in Boston. Two days of what looks to be a series of great talks and interactive sessions.

As enthusiastic as I was about the session, I was less enthusiastic about the format of the schedule itself... it was a little tricky to read through the sessions to try to chart my day. So I dusted off my XSLT found a lightweight XML editor in XML Copy Editor and built a clickable grid. This way, I could keep track off all the sessions I wanted to attend, as there really are a lot of great topics and speakers lined up.

Day 1 of DataEast14...
Day 1 of DataEast14
So hopefully this conference helps jump-start me spending more time to work on some data projects. More to come.

Apr 27, 2014

Dennis Crowley & The Art of the Apology

Dennis Crowley, the CEO of Foursquare, recently came under fire after it was discovered that his wife Chelsa used a fake bib to run the Boston marathon.

Although he’s since offered a more, erm… apologetic apology to the community that was upset by the actions of his wife, his original apology fell short of what a good apology should be. As I read it, I couldn’t help but notice how much of the apology was about him and his wife, and not about the people they might have hurt.



I did a quick analysis of his original response on the WCVB website, and found that nearly two-thirds of what he wrote centered on him and his wife. Only a little more than 30% of the 27 lines he wrote were some form of an apology.

In three of his four paragraphs, what started as an apology quickly switched into an attempt to justify his and his wife’s actions.

The reality is that when you're offering an apology, the party to which you are apologizing is not terribly interested in how you're feeling; they want to hear an acknowledgment of how you made them feel through your action or inaction.

As a post on the Harvard Business Review blog lays out:
In a nutshell, the problem is that most people tend to make their apologies about themselves—about their intentions, thoughts, and feelings.
“I didn’t mean to…”
“I was trying to…”
“I didn’t realize…”
“I had a good reason…”
When you screw up, the victim of your screw up does not want to hear about you. Therefore, stop talking about you and put the focus of your apology where it belongs: on him or her. Specifically, concentrate on how the victim has been affected by your mistake, on how the person is feeling, and on what he or she needs from you in order to move forward.
After some exchanges on Twitter, it seems that Dennis Crowley learned his mistake and he offered a better apology on Medium. It's probably a good reminder for all of us on how we should be apologizing the next time we hurt someone.

Feb 16, 2014

This is Jeopardy.

This past week, one of my colleagues flew out to do a taping for Jeopardy. He's a smart guy so I think he'll do well, and I'm looking forward to watching him when his show airs in a few months.

In the lead-up to his time on the show, we refrained from testing him with trivia, but we did get into some serious debates about wagering strategy. One of the more particular (and specific) scenarios we spent some time on had to do with the right wager to make when the last clue of Double Jeopardy is a Daily Double.

The root of the discussion is what I'm calling the Stegner Conjecture, named for the colleague who was adamant about making a big wager to put the game away, as long as you saw the category being neutral or better. His perspective is that you know more about the Daily Double category than you do the Final Jeopardy question, so you should use that to your advantage to put that game away.

While I understood his logic, I wasn't sure I would necessarily bet by his rules if I was ever placed in that spot. But... that opinion may have changed as I worked through the problem.

So first, let’s establish the scenario. For the sake of simplicity, we focused on the scenario where there will be just two players in the Final Jeopardy round. In this scenario, the two players who will compete in Final Jeopardy are separated by a small amount of money, and the player in the lead gets a Daily Double for the final clue of Double Jeopardy. Assume that this player (P1) has $10,200 and the second player (P2) has $10,000. Now, there are three basic betting scenarios:
  1. Bet big to put the game away (The Stegner Conjecture) – we’ll fix this amount at $10,000; winning would guarantee that Player 1 will win the match, as they will have more than double the score of P2
  2. Bet very small – we’ll fix this amount at $0; this means the game is determined by the contestants’ bets and responses in Final Jeopardy
  3. Wager an amount in the middle – we’ll fix this amount at $5,000; P1 will have $15,2000 or $5,200 for Final Jeopardy
Now, we need to look at the outcome of Final Jeopardy in each of the above betting scenarios. We can break down the outcome of Final Jeopardy by looking at the probabilities for the different response scenarios, which show the final responses by score position for Final Jeopardy between two contestants. Looking at the past 10 years, in games ending with two players in Final Jeopardy:
  • Right Right: 34%
  • Right Wrong: 27%
  • Wrong Wrong: 25%
  • Wrong Right: 14%
What this tells us--assuming we are comfortable using historical probabilities to predict future outcomes--is that P1 will have a 61% chance (34% + 27%) of being right in Final Jeopardy, and P2 will have a 48% chance (34% + 14%) of being correct. P1 will be wrong when P2 is right just 14% of the time.

For what it's worth, this degree of variation from an even distribution (25% - 25% - 25% - 25%) does pass a chi-square test for significance (p < 0.05). That said, I also modeled the outcomes using a uniform distribution for comparison purposes.

Now, for each betting scenario, I determined the Final Jeopardy betting strategy that would give each contestant the best chance of winning. In some situations, the player with the lower score's bet would be irrelevant, as there would be no way for the leading player betting rationally to lose.


Based on this analysis, P1 has the following chance of winning for each betting scenario. Note that the first number assumes an even distribution, the second number uses the historical distribution.

Stegner Conjecture
  • Right answer on Daily Double: 100% / 100%
  • Wrong answer on Daily Double: 0% / 0%
Medium Wager
  • Right answer on Daily Double: 75% / 86%
  • Wrong answer on Daily Double: 25% / 14%
Low/no Wager: 50% / 61%


So now, the only task left to do is to assign a probability for P1 answering the Daily Double correctly, and then calculate the final expected outcome for P1 given the different betting scenarios and the Daily Double probability.

Expected Value of game, based on historic Final Jeopardy outcomes
Expected Value of game, based on historic Final Jeopardy outcomes

Expected Value of game, based on uniform distribution of Final Jeopardy outcomes
Expected Value of game, based on uniform distribution of Final Jeopardy outcomes

Given this, the model suggests that:
  • If you go by historic figures, you should bet big if you think you have greater than a 61% chance of getting the Daily Double correct, otherwise you should bet zero
  • If you go by an even distribution, you should bet big if you have at least a 50/50 chance, otherwise you should bet zero
  • There is no scenario where a medium wager is optimal
Given that you know nothing about the Final Jeopardy category, it really becomes an exercise in determining whether you feel more confident in answering the Daily Double correctly or answering a Final Jeopardy question you know nothing about correctly.

So in the end, the Stegner Conjecture holds, although I'll admit that I would find it difficult to make that big of a bet unless I felt significantly more confident than the 50% or 61% suggested above. Part of that is the emotional player winning out over the rational player, but also an indication of the difficulty in ascertaining a quantitative degree of confidence in a situation like above.