Sunday, February 28, 2010

Twitter Forecasting: How likely is it that I'll tweet tomorrow?

For a while now I've been swirling around the notion of forecasting (or simulating) the activities of members in social media communities, especially Twitter. (Think of the weather. Now think of hurricane predictions. Now replace the hurricane with a twitter member and replace land with different twitter activities. Now you're thinking like I'm thinking. I'm on a horse.)

In my quick glances across the web, I have seen a bit about social forecasting in general (and some really really smart people talking about it), and I've seen lots of forecasts in regard to the industry of social media, but not really anything addressing the forecasting of specific activities within a specific community.

Trending is something that the industry is starting to get a hold of, but what I'm talking about goes beyond trending. Trending tells us what has happened. I'm interested in what will (or at least is likely to) happen. In my mind forecasting presents some exciting possibilities in being able to help everyone involved in social media communities from the community managers to the system admins.

For community managers, the benefit lies in being able to work off of indicators that signal the rise of a community star or the trailing off of one. Whole simulations could be run based on activity in a member's first 24 hours.

For systems admins it could help in identifying spikes before they happen or identifying the best days (or hours) to perform maintenance and updates.

Maybe I'm overstating the possibilities, but I think it's big and it's exciting stuff to me. Let's get started.

How likely is it that I'll tweet tomorrow?

It's a simple question but one that has lots of implications. It can help a community manager know whether I'm engaged or slipping away. It can help a systems admin know if I'll be requiring any computing resources.

If we were to start by saying: "What's the probability I will tweet on any given day?" we'd find out that over the last 6 months I've tweeted on 57% of the days, just a little over half of the days. But our question isn't about "any given day" it's about tomorrow.

We know "tomorrow" is one day in a series of my twitter engagement. So what if we knew whether or not I had already tweeted today? Would that make a difference in our probability? Am I more likely to tweet tomorrow if I've tweeted today? Less likely?

Math modeling (no...not that kind of modeling)

What if we could develop a simple model that helps us predict my future tweets by my given state? Turns out, we can...or at least we can try. In this case the key is to focus on the probability of transitioning from one state to the next: Given that I tweeted today, what's the likelihood that I tweet tomorrow? What about for the next 3 days?

So that's what I did. I choose a Markov model (which I've looked at before, but never used...so please...if you see this and are some kind of Markov model expert, please let me know how I did) and starting working away at trying to come up with one that was more than just throwing numbers up in the air.

Now...my model is currently based on a very small sample size (just my twitter activity), and therefore has a very high margin for error, but it's a start. (There are obvious problems with the "super" predictions due to my small sample.)

Here's what I have:


          dor  act  sup
dormant [ 0.46 0.54 0.00 ]
active  [ 0.40 0.59 0.01 ]
super   [ 0.00 1.00 0.00 ]


I've created three states called "dormant", "active", and "super". A dormant user will not tweet in a given day. An active user will tweet 1 to 9 times. A super user will tweet 10 or more times in a day. The matrix represents the probability of moving from one state to the next.

For example, if I tweet today, there is actually only a 40% that I won't tweet tomorrow. (In contrast, there is a 60% chance I tweet at least once.) If I'm dormant today, there's actually only a 54% that I tweet tomorrow.

Let's look at this again. Our simple average says there's a 57% chance I tweet tomorrow, but our model says there could be as high as a 60% chance and as low as a 54% chance. While those all sound close together, when you are talking thousands or millions of users, those small percentage points can mean a lot.

More to come...

To me this is only the beginning. Here's what I'm looking at for next steps:

1) A model based of off all the people I follow on twitter. It gives me a larger sample size (that's not ginormous) and could be really cool to take a gander at.

2) A functional programming model. I did all of my initial fetching and computation using Ruby which is my hammer in this programming world. However, once of the sparks that got me to actually start on this project was the opportunity have something concrete to apply a functional language to. I believe the crunching involved to predict large datasets would benefit greatly from a functional design and given their current hotness I'd love to let one loose on this thing.

3) A model based of off a large twitter sampling. Lots of users. Lots of crunching.

4) A web service? I'm still working on the best way to practically expose this data and work with it. I've got lots of ideas but none that are shining right now...

5) Other models. I'd love to try some other models and test their effectiveness...

That'll do it for now. I'd love to hear your feedback on this.

----

Also if you're interested I've posted the code I wrote this weekend up in a gist. It was two files, but I've combined it for sharing. I did it in a style I'm going to call narrative programming, where the main concern is not reuse or architecture, but instead telling a story and following a train of thought from beginning to end.

Saturday, December 5, 2009

On to the Next Adventure

Monday morning bright and semi-early I start my next professional adventure. I'll be joining Sabre Holding Company. Sabre is a travel technology company that has as much past (developing the first electronic reservation system) as it does present (travelocity) and future (checkout tripcase) and I'm excited about the opportunities there.

I'll be joining the Travel Studios group which is tasked with experimenting with emerging technologies and products. Specifically I'll be working on Cubeless, an enterprise social network. I'm tellin' ya...these social network thingies...they're gonna catch on. ;)

I'm really excited about joining this organization, group, and product team. Thanks to everyone that's been supportive during the transition and I look forward to the things to come as a Sabre-ite...Sabreon...Sabreian...Sabrenian... ;)

Thursday, November 19, 2009

Change

There's no easy way to talk about this without just saying it...Friday, December 4 will be my last day at The Garland Group. I've decided to start on a different adventure that I'll talk about more as it gets closer.

Before I move on, I do want to expend just a few 1s and 0s on just how much I have enjoyed working at The Garland Group. Honestly, if I were to really get into every inch I've enjoyed, you'd probably think this "Garland Group" place doesn't really exist...it's just a fairy tale I've made up to make other work environments look silly.

You probably wouldn't believe that you can work next to someone that's in a different state or complete projects without ever formalizing work hours. You'd never imagine that encouraging people to go to the grocery store in the middle of a Tuesday could lead to results above expectations. You'd think there is no way a small company headquartered in the Dallas suburbs could change the way an industry thinks and talks about Compliance and that Security could involve more Collaboration than combinations.

Yes. I suppose it does sound a little far fetched, but it's been my reality. It's a tough place to say goodbye to and a hard group to part ways with. I have very much enjoyed my time at The Garland Group and though I am very excited about what is on the horizon, I'd be kidding myself if I said I won't miss it.

Wednesday, October 28, 2009

Abstract Analyzer

Here's a project I've been plugging away at:



(Big version here, or use the tiny full screen button in the bottom right of the movie)


Gem: http://gemcutter.org/gems/abstract_analyzer
Source: http://github.com/markmcspadden/abstract-analyzer

Saturday, October 24, 2009

Rolling with Raindrop

Today Mozilla announced a message aggregation project they've been working on called Raindrop. Now, I find myself slower and slower to fall into the hype on these type of things, but after downloading the source and getting it up and running on my machine, I have to say it looks pretty cool.

The install took a couple of hours, mostly due to my non-existent python chops and having to download and install Mercurial. But after a while I was up and running and pulling down my twitter feeds and emails into the same location. Way cool.

Spelunking

But what kind of nerd would I be if I just got it running and stopped at that? ;)

In addition with directions on how to setup twitter and gmail aggregation, the default install comes with a single RSS feed baked in. But who can do with just one RSS feed right? So I set out to add another.

It proved pretty difficult just to find where the initial feed was set (Textmate Ack in Project failed me) so I hopped into the Raindrop chat room where Mark Hammond from the Raindrop team pointed me to the correct directory. (Mark also said he didn't know if anyone had even tried this yet, but I wasn't going to let that little detail stop me.)

With his help I soon had 2 RSS feeds dumping into my Raindrop. Cool. Sure they were being dumped into a single box that had the wrong heading, but it was a start.

The major thing that bugged me was that they are streaming in without links. Boooo. Feeds need links. So I start hacking at the JS and HTML implementation of those messages and before long I had an external link for each headline.

Missing the Point

I felt pretty accomplished, but I sat back and realized that I had missed the boat on the whole point of Raindrop. It's not just to aggregate data and then push you off to the outside world, from what I understand it's about being able to interact with all types of content from a single location. The external links had to go.

A quick look at the twitter implementation revealed what I needed, a link to couchdb doc that actually holds each story. The Raindrop UI is setup to handle the display of these so after digging in and finding out where to get the document id I was in business. I could view entries from multiple feeds, open them within the Raindrop application, and even archive them. (I have no idea where they go when they are archived, I just know they leave the front page.)

So all that work for this little diff:

diff -r e07f7793ad1b client/lib/rdw/story/templates/GenericGroupMessage.html
--- a/client/lib/rdw/story/templates/GenericGroupMessage.html  Fri Oct 23 15:10:01 2009 +1100
+++ b/client/lib/rdw/story/templates/GenericGroupMessage.html  Sat Oct 24 02:23:34 2009 -0500
@@ -4,7 +4,7 @@
   </div>
   <div class="message">
     <div class="content">
-      <span class="subject">${subject}</span>
+      <span class="subject">${subject} <a href="#${expandLink}" class="expand" title="${i18n.expand}">${i18n.expand}</a></span>
     </div>
   </div>
 </div>


It doesn't seem like much, but it represents several hours of education and paradigm examination and I'm proud of it.

Now, off to bed...

Friday, October 16, 2009

Predictive and Reflective Development Metrics

We spent some time this week working on Development Metrics. Without getting into all the details, I did want to share one illumination that came from those discussions.

Two Types of Metrics

What I realized when looking at the various metrics and methodologies out there is that they fall into two main buckets I'm currently calling "Predictive" and "Reflective." (If there are better industry-standard words for these, feel free to let me know.)

Predictive metrics are the measurements we put in place to gauge what we think is going to happen. Almost all code testing (Unit testing, interaction testing, etc.) provide us with predictive metrics.

Reflective metrics measure what actually happened.  All production monitoring (errors, performance, etc) fall into this bucket.

A Few Reasons to Care

Ok. That's great. Why does it matter?

I noticed is that this distinction is very important when communicating to people less technical, especially if those people are decision makers. I'm you've heard something to the effect of: "Why did the website break if we have all these tests?" A predictive/reflective vocab can really help this conversation stay high level instead of diving into the depths of the short falls of testing.

In addition, I think it can help decision making about where to utilize resources. When you look at resources in this light, it makes you realize how much effort you need to be spending on reflective metrics. Not that predictive metric don't mean anything, in fact I think that every reflective metric you care about needs to have a predictive process to guard it, but you may find your priorities lie in meeting your predictive metrics which may only be telling half the story. (And a wishful thinking version of the story at that.)

Even if the two above aren't a ton of help to you, this 3rd realization kind of blew my mind. When looking at "feature development and deployment" it seemed pretty clear that this is a predictive process. You think you know what a user or client is asking for. You think you know how a feature will be utilized. These are predictions.

On the other hand, user feedback and requests are reflective measurements. They let you know how things are actually being used and working and not working.

Here's the kicker. How much time do you spend in feature meetings trying to hash out the right functionality? And how much time do you spend talking to users, getting feedback, and following up on feedback? Hmmmm......

Would love to hear you metricize...

Monday, September 21, 2009

Working without the Internet

Last week I spent 3 days working from College Station, TX. I spent most of my time detached from the interwebs and found it actually very very productive. 

The perfect balanced seemed to be having limited and easy to turn on and off access. While I didn't have wifi most of the time, I had setup my phone to be a tethered modem. Now this isn't exactly in line with the User Agreement of my carrier and that fact kept me from having it on the whole time.

The point is, I turned on the internet only when I needed it, which turned out to be less than 5 minutes every hour. Five minutes. That's crazy to me considering how many times per MINUTE I get dings and chirps and whistles all from internet driven activity.

Of course I wasn't doing many video conferences etc, but for getting actual work done, it seemed to workout really well. I may start trying this more often....we'll see.