8

Warning:

This is just some basic analysis that I thought people might find cute. If you want me to delete it / change the title to free up an objectively good question title, I'm happy to do so.


(sarcasm)

Obviously Mathematica.SE is all about the points and no one is going to spend 2 days helping someone with their problems just because

So with that in mind, let's do some more silly data analysis to answer the question: "what are the best types of questions to ask / answer?"

We'll use data I've already compiled, which is current up to 7/30/2017.

Dataset`$DatasetTargetRowCount = 5;

$questions = CloudImport["user:b3m2a1/mse_question_list.mx"];

Map[Thread[#[[1]] -> #[[2]]] &]@$questions[All, {"tags", "score"}] // 
     Normal // Flatten // 
   Merge[Mean@*Replace[_?(Length[#] < 15 &) -> {0}]@*Select[# < 20 &]@*
     N] // ReverseSort // Dataset

best questions

So clearly I should only be asking FAQs from here on out (note that I was pretty strict about what I'd take in my question list -- the tag had to be used 15 or more times on questions with score less than 20).

And then we'll do the same for the answers:

$answers = CloudImport["user:b3m2a1/mse_answers_list.mx"];
$questionIDTags =
  Rule @@@ Values@$questions[All, {"question_id", "tags"}] // Normal //
    Association;

Map[Thread[#[[1]] -> #[[2]]] &]@
       $answers[
        All, {$questionIDTags[#["question_id"]], #["score"]} &] // 
      Normal // DeleteCases[_Missing -> _] // Flatten // 
   Merge[Mean@*Replace[_?(Length[#] < 15 &) -> {0}]@*Select[# < 20 &]@*
     N] // ReverseSort // Dataset

best-answers

Which similarly suggests I'm not answering enough caching questions.

One last thing to test, because I've spammed the site with many too many paclet-related Q/As. We'll drop me from any of the results:

Map[Thread[#[[1]] -> #[[2]]] &]@
       $questions[Select[#["owner", "display_name"] =!= "b3m2a1" &]][
        All, {"tags", "score"}] // Normal // 
     DeleteCases[_Missing -> _] // Flatten // 
   Merge[Mean@*Replace[_?(Length[#] < 15 &) -> {0}]@*Select[# < 20 &]@*
     N] // ReverseSort // Dataset

not-my-questions

Map[Thread[#[[1]] -> #[[2]]] &]@
       $answers[Select[#["owner", "display_name"] =!= "b3m2a1" &]][
        All, {$questionIDTags[#["question_id"]], #["score"]} &] // 
      Normal // DeleteCases[_Missing -> _] // Flatten // 
   Merge[Mean@*Replace[_?(Length[#] < 15 &) -> {0}]@*Select[# < 20 &]@*
     N] // ReverseSort // Dataset

not-my-answers

which suggests maybe I should stop trying to make the paclets tag happen... (or at the very least that the rest of the site cares rather less about it than I do)

One interesting thing about this is that both generative art and FAQ seem to be a generally high scoring tags, in that there are both numerous questions and answers on it that score well. In fact it's sorta the inverse FAQ tag--your generative art answers are likely to score better than your FAQ answers, but your FAQ questions are likely to score better than your generative art answers.

Update: Time-normalization

If we try to normalize against questions that remain active a long time (giving a long, but slow accrual period) we find slight differences in the answers, but none in the questions. First the time computations:

times =
  UnitConvert[
   Now - FromUnixTime[#] & /@ 
    Normal@$questions[All, "creation_date"],
   "Days"];

times =
  UnitConvert[
   MapThread[
    FromUnixTime[#] - FromUnixTime[#2] &,
    Thread[
     Values /@ 
      Normal@$questions[All, {"creation_date", "last_activity_date"}]
     ]
    ],
   "Days"
   ];

$timeMap =
  AssociationThread[
   $questions[All, "question_id"] // Normal,
   Max[{#, 1}] & /@ QuantityMagnitude@times
   ];

Then for the questions, no change:

$questionScoreMap =
  $questions[All,
     #["question_id"] ->
       #[
         "score"]/(Min@{Lookup[$timeMap, #["question_id"]], 7})
      &] // Normal // Association;

Map[Thread[#[[1]] -> #[[2]]] &]@
       $questions[
        All, {#["tags"], $questionScoreMap[#["question_id"]]} &] // 
      Normal // Flatten // 
    Merge[Mean@*Replace[_?(Length[#] < 15 &) -> {0}]@*
      Select[# < 20 &]@*N] // ReverseSort // 
  KeyDrop[{"faq"}] // Dataset

time-normed-questions

For the answers, caching, paclets, and lazy-computations fall off:

$answerScoreMap =
  $answers[All,
     #["answer_id"] ->
       #[
         "score"]/(Min@{Lookup[$timeMap, #["question_id"]], 7})
      &] // Normal // Association;

Map[Thread[#[[1]] -> #[[2]]] &]@
        $answers[All,
         {
           $questionIDTags[#["question_id"]],
           $answerScoreMap[#["answer_id"]]
           } &] // Normal // DeleteCases[_Missing -> _] // Flatten // 
    Merge[Mean@*Replace[_?(Length[#] < 30 &) -> {0}]@*
      Select[# < 20 &]@*N] // ReverseSort // 
  KeyDrop[{"faq"}] // Dataset

time-norm-answers

which suggests that there were a few answers there that kept getting updated and accruing points.

So don't everyone rush to answer those types of questions all at once. Better to answer a question on fractals for your quick hit of MSE.

Update: Sample resizing

C.E. points out that my sample is lacking, in that all of the things that percolate to the top tend to have few questions / answers and suggests that I try tags with ~200 questions.

If we apply that restriction, things do indeed change a lot:

Map[Thread[#[[1]] -> #[[2]]] &]@$questions[All, {"tags", "score"}] // 
      Normal // Flatten // 
    Merge[Mean@*Replace[_?(Length[#] < 200 &) -> {0}]@*
      Select[# < 20 &]@*N] // ReverseSort // 
  KeyDrop[{"bugs"}] // Dataset

200+ questions

For the answers, we'll take only tags with 300+ answers assuming 1.5 answers per question (I didn't feel like correlating tags, questions, and answers and there are ~66k answers to ~45k questions)

Map[Thread[#[[1]] -> #[[2]]] &]@$answers[
        All, {$questionIDTags[#["question_id"]], #["score"]} &] // 
      Normal // DeleteCases[_Missing -> _] // Flatten // 
   Merge[Mean@*Replace[_?(Length[#] < 300 &) -> {0}]@*
     Select[# < 20 &]@*N] // ReverseSort // Dataset

300+ answers

And we see something that will, I think, surprise no one. Answers involving visuals (image-processing, visualization, computational-geometry, geometry) fare really well. What is interesting is that compile does so well too. But that does make sense in the context of the computation-heavy things that (I imagine) many of the users do.

On the other hand, for questions compuational-geometry still fares well, but it skews much more towards the less-well-documented programming side of things (associations, options), and very-poorly-documented interface type things (customization, front-end).

  • 1
    faq is added later so you can remove it from the list. I guess a simple mean is not very informative, maybe something like upvotes / (tag day)? it would bump tags with hundreds of topics up. It is clearly better to have more opportunities to get 5 upvotes than a few to get 10. – Kuba Aug 2 '17 at 6:34
  • not that I care... – Kuba Aug 2 '17 at 6:35
  • @Kuba you mean normalize against the length of time the question has been around (or maybe between creation and last activity)? That seems reasonable to me. I only have "creation_date", "last_edit_date" and "last_activity_date" for time resolution, unfortunately. – b3m2a1 Aug 2 '17 at 6:36
  • Or you could take total points per tag and normalize it by tag life length, don't know if there is info about tag creation date. – Kuba Aug 2 '17 at 6:41
  • @Kuba if that info is there it's not directly available in my dataset. I'll check the API after I finish that first brush at normalization. It'd be good to have in my service connection if it exists. – b3m2a1 Aug 2 '17 at 6:44
  • @Kuba interestingly normalizing by the question life itself (i.e. last activity - creation) gives no change. But that does go to show that after the score has accrued, it's not going to change much. Let me see what I can do about tags. Interesting problem. – b3m2a1 Aug 2 '17 at 7:00
  • @Kuba so I can get a tag last_activity_date if I make a filter to pass, but I don't think that'll suffice and I'd prefer to go down that rabbit hole some other day. – b3m2a1 Aug 2 '17 at 7:37
  • 3
    Many of those tags are small tags: paclets has 25 questions, caching 14, lazy-computations 13, design-patterns 20. A tag like graphics, with 2637 questions, isn't going to stand a chance because the variance is much higher for small samples. Similarly, you would likely find that the least rewarded tags are also small. It'd be interesting to see what happens if only tags with more than 200 questions are selected, for example. – C. E. Aug 2 '17 at 10:54
  • 1
    I strongly disagree with your statement "Mathematica.SE is all about the points". I think it's mainly about helping people to make better use of Mathematica. Don't get me wrong, I like earning points, but I won't let likely lack of votes stop me from spending several hours over a couple of days working with a newbie on a question no one but the OP finds interesting. – m_goldberg Aug 3 '17 at 5:11
  • "... no one is going to spend 2 days helping someone with their problems just because...". I beg to differ. I've given a huge amount of my Fake Internet Points away as bounties on other questions, since I couldn't care less about my score (and I'd venture most of the recipients of said bounties are of the same mindset). I've spent more than days on single problems posted here, because they're interesting problems and usually interesting applications of MMA, nothing more. I know many of the regulars do the same. – ciao Aug 3 '17 at 6:52
  • 3
    @ciao, m_goldberg Guys I was joking. That linked thing is me doing just that. – b3m2a1 Aug 3 '17 at 7:18
  • @m_goldberg tagging you here so you get that note too – b3m2a1 Aug 3 '17 at 7:19
  • @m_goldberg, ciao I update the post to make that more clear, as I guess people won't necessarily click through the links. – b3m2a1 Aug 3 '17 at 7:22
  • 2
    @b3m2a1 they should if they are about to post a critique. :) – Kuba Aug 3 '17 at 10:20
  • @C.E. that was a good suggestion. Results are very different if you do that, and I think I have an explanation (although it might be bunk). – b3m2a1 Aug 4 '17 at 4:47

You must log in to answer this question.

Browse other questions tagged .