I'm trying to mine that Stack Exchange data dump to find out whether there is a cluster of users that may be positively or negatively affected by the number of badges they've been awarded. The theory I'm working on is that for some people who were motivated by badges, that they eventually lose their appeal and they stop posting.

Currently, I've filtered the raw data down to a set of:

  • User ID
  • Year and Month
  • Posts made during that month
  • Total badges that user has earned up to that month

I'm not sure how to proceed in order to find these users. I'm not even sure how to formulate this question into something I can take action on. If I visualize it in my head, what I'm thinking is seeing a chart of an x-axis of badges earned, a y-axis of posts made per month, and then seeing the line dip after a certain number of badges. But this only works on a per user level. I want to find the cluster of users for whom that chart would hold.

Any ideas?

Thank you!

  • 3
    $\begingroup$ Some people care about badges? ;) $\endgroup$
    – cardinal
    Apr 13, 2012 at 19:47
  • $\begingroup$ That's the question I'm trying to solve! If I can't make it come out of the data, then that's useful to know too :) $\endgroup$
    – cflewis
    Apr 13, 2012 at 19:52
  • 3
    $\begingroup$ Many of the same considerations are pertinent in my past attempt to measure reputation effects, see stats.stackexchange.com/a/14352/1036, the critique by whuber and the associated blog post. Although off-the-cuff I would say it is a substantially easier question to address. Such things as questions views and subject popularity are hypothetically not pertinent (or at least should not be as strongly related as they are to voting behavior). $\endgroup$
    – Andy W
    Apr 13, 2012 at 20:22
  • $\begingroup$ Mmm, yes, it would be dangerous for me to make too many inferences based on the data, regardless of what does or does not pop out from it. There are many reasons people could leave (chiefly boredom!). My hope was that I could at least take a shot at it, and if I can say "well, I tried this method, and it seems reasonable, and nothing is here" then that will make me happy in and of itself. $\endgroup$
    – cflewis
    Apr 13, 2012 at 20:46
  • $\begingroup$ If you think that clustering would be a good approach, you might consider using techniques similar to the clustering methods such as ClusterGrams used in Gene expression analysis and micro array data analysis. In these techniques, you can look at snapshots of the level of activity of different genes in the cell (in your case, these might be posts/comments/badges earned - while instead of a cell you would have a user). If this interests you (or someone else) tell me and I will post a more complete answer. $\endgroup$
    – Andrew
    Apr 17, 2012 at 13:02

1 Answer 1


In order to fully understand my answer and the references that I will provide, I will first (informally) introduce some concepts related to biology - most of the techniques that I will refer to are used in computational biology and therefore most of the reference you will find will assume a basic familiarity with the terms.

A gene is a unit from a living organism that can be "expressed" when required - that is, the gene will perform the action that it is associated with (often by coding the proteins that it represents that will perform the desired action). e.g. a cell may build a variable amount of proteins from a gene that regulate its metabolism.

Biologists are often interested in tracking these genes and/or their expressions through time or evolution.

In your case, you are interested in understanding how the individual actions of the users (similar to a gene) are expressed through activity over time. A user (similar to the organism) has several different actions that he can perform and we are assuming that the type of user and his current situation has some form of correlation with the actions that he will perform.

I would consider looking at two or three different techniques that are available - biclustering (sometimes row and column clustering, see figure 1 in link) and perhaps some sort of evolutionary tree (which is taken from this article) or a Hidden Markov Model.

In the case of biclustering, the idea is as follows, place the users on one axis and the actions on another axis of a matrix. The values in this matrix will represent the number of actions that said user has made of the relevant type. Reorder the users and actions in a way that groups similar items near each other 1, 2 and then use some form of clustering to group your users automatically (some algorithms can be find here).

The result of biclustering is that you can group users into subgroups and identify their traits in terms of actions. Note that in this case, you will only have a "snapshot" of users and their actions - in order to better understand the trends through which user actions evolve, you might need to perform several biclusters for different scenarios. Perhaps you might create biclusters for users that have spent a particular amount of time using Stack Exchange (say 1month, 3months, 6months, 1year) or users that have undergone a particular event (say just been awarded a badge yesterday). This will allow you to analyse the trends better - although the exact statistics and interpretation should be properly interpreted.

As @AndyW pointed out in his link to How can I improve my analysis of the effects of reputation on voting? there are several problems that can arise from the data. Misrepresentation, missing data, inaccurate data and small amount of data are but some problems that you might encounter. Baldi and Brunak explain some of the problems that are typically encountered in data found in biological databases. In particular note that there might be non-trivial redundancies in your data that you might need to normalise in some way (e.g. the same user in different stack exchange forums).

The alternative technique that I might suggest is based on evolutionary trees and/or Markov Models (HMM) - I grouped the discussion on these techniques because you could potentially use them in a similar manner. In this case, we might visualise a starting point from which all users start and the users "evolve" or "change state" due to different phenomena. After each state change, they are likely to perform a different volume and/or proportion of actions.

The main problem here will be creating the ideal taxonomy or HMM topology. If (perhaps through biclustering as above) we identify four different types of user, a user will start by being assigned to one of these states and while in each of these state he will perform a different volume and proportion of actions. From this point onwards I will focus on the use of HMMs as evolutionary trees are not designed to model cycles or transfers from one groups to another - which might make them better suited.

The work to be done in this case is to train the HMM from the data and identify how likely a user is to move from one state to another - notably from one state to the inactive user end state, where a user is no longer active. This will allow you to create a model of user behaviour.

Now, once you have this HMM trained, all you need to do is get the list of user actions and trace this user through the most probable path - while in a particular state a user will be considered to be "of that type".



Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.