1. Introducción

 

La etapa de implementación o codificación en lo que al proceso de desarrollo de software respecta, es considerada crucial para un proyecto, esto debido a que en esta etapa en particular entre otras tareas, se desarrolla el código fuente del proyecto. Algo muy peculiar en esta etapa, es que los ingenieros de software encargados del desarrollo de código fuente,suelen encontrase con cierto tipo de problemas o errores en su código, es a partir de este tipo problemas que surge una cuestión muy genérica entre los desarrolladores de software: ¿Dónde podría recurrirse o consultar la solución a estos problemas?

Una posible respuesta a la pregunta planteada podría ser recurrir a plataformas o sistemas web colaborativos, con el objetivo de poder hacer preguntas o revisar soluciones respecto al problema. Uno de los sistemas web colaborativos más populares entre los desarrolladores informáticos en la web es denominado:“Stack Overflow”.

Stack Overflow, es uno de los sistemas colaborativos en línea más grande y confiable entre la comunidad de desarrolladores informáticos, los usuarios puedan hacer y responder preguntas. Existen muchos sistemas exchange, entre ellos algunos bien conocidos Yahoo Answers y Quora, en el siguiente enlace se pueden ver más de estos sistemas. Stack Exchange



"Monthly StackOverflow Visitors, January 2016"

Muchas de las preguntas a las que recurrimos en el sitio, no tienen una solución marcada, tienen muchos comentarios o definitivamente no tienen solución. Planteamos el análisis de Stack Overflow para responder algunas preguntas como: ¿qué tiempo debo esperar para obtener una solución favorable?, ¿por qué existen tantas preguntas sin respuesta?, para los usuarios registrados: ¿cómo incrementar su reputación en el sitio?. Estas son algunas de las preguntas que deseamos responder al finalizar el análisis

2. Objetivos

 
  • Aplicar las técnicas aprendidas en clases sobre Stack Overflow para descubrir patrones de uso.
  • Determinar cuales son las características más relevantes de una pregunta.
  • Obtener algún conocimiento sobre el comportamiento de sus usuarios.

3. Descripción de los Datos y Exploración inicial

 

Los datos utilizados para el proyecto fueron extraídos de Stack Overflow Data , El servicio web de Google BigQuery permite realizar almacenamiento y consultas de conjuntos de datos masivos con billones de registros.

Para el proyecto se seleccionó la base de datos de Stack Overflow, esta base de datos esta conformada de 16 tablas, de las cuales consideramos como relevantes son las preguntas, respuestas, tags, comentarios y usuarios. En este enlace se pueden visualizar los atributos de las tablas con más detalle. A continuación se muestran la cantidad de registros por tabla


Tabla Cantidad Registros
users 7'250.739
tags 49.306
post_questions 14'015.379
post_answers 22'046.899
comments 58'159.095

Con la finalidad de crear un dataset para el proceso de análisis se extrajeron los datos de preguntas realizadas desde Enero de 2016 hasta Junio de 2017.

Para entender un poco más del significado de estos atributos, recurrimos a la Wiki de StackOverflow. Las preguntas, respuestas y usuarios tienen un puntaje o score que suma cuando un usuario da un voto y también puede disminuir, además del número de visitas, la fecha de creación y respuesta de la pregunta y reputación del usuario.

Como exploración inicial visualizamos los tags que más se usan en las preguntas:

import csv
from wordcloud import WordCloud
import matplotlib.pyplot as plt
reader = csv.reader(open('/dm_project/tags_count_tags.csv', 
'r',newline='\n'))
d = {}
for k,v in reader:
   d[k] = int(v)
   wordcloud = WordCloud(width=900,height=500, max_words=700,relative_scaling=1
   ,normalize_plurals=False).
   generate_from_frequencies(d)
   plt.imshow(wordcloud, interpolation='bilinear')
   plt.axis("off")
   plt.show()
               
Word Cloud Tags

La imagen muestra que la mayor parte de las preguntas realizadas en el sitio correponden a lenguajes de programación como: javascript, java, android, python, c#, php, c++

Para el dataset de exploración seleccionamos las preguntas que tienen el tag java y python.

Se eliminaron los campos que no agregan valor a el análisis como id's y se reemplazaron los valores nulos, que eran datos vacíos por cero en los campos numéricos.

 
select q_id, 
   case when a_comment_count is null then 0 else a_comment_count 
   end as a_comment_count,
   FORMAT_UTC_USEC(a_creation_date) as a_creation_date,
FROM 
   [fleet-automata-177802:filtros_stackoverflow.answer_question] 
                

Con la finalidad de observar el comportamiento de las respuestas a las preguntas en el tiempo se creó un gráfico de frecuencias. En el primer gráfico se puede observar la frecuencia con la que las preguntas reciben su primera respuesta, la cual en su mayoría es en la primera hora, sin embargo existen preguntas que se responden después de un día incluso meses. Código fuente

Primera respuesta Respuesta aceptada

El comportamiento de la primera respuesta y la respuesta aceptada aparentemente es similar, esto indica que en la mayoría de los casos la primera respuesta es la seleccionada.

Otra de las variables analizadas fue el número de respuestas por pregunta. Obteniendo como resultado una diferencia de el 25% entre las preguntas con respuesta y sin respuesta seleccionada. Se puede observar además que existe al menos una pregunta que tiene más de 20 respuestas. Código fuente

Respuestas por pregunta

Para visualizar la relación entre los atributos cuantitivos del dataset se creó una visualización multidimensional. Los atributos que inician con 'a_' corresponden a la suma total de todas las respuestas no aceptadas de una pregunta, los que incian con 'q_' son los atributos de las preguntas, los tiempos corresponden a la primera respuesta (time_first_a), la última (time_last_a), y el tiempo de la respuesta aceptada (time_atd), además se contempló los atributos de la respuesta aceptada (atd_comments,atd_edit,atd_score). El atributo particular edit corresponde a la cantidad de respuestas editadas. Código fuente

Del gráfico anterior se puede concluir que existen atributos no tienen una relación determinante con la clase de pregunta. Existe una cantidad apreciable de preguntas cuyas respuestas fueron emitidas después de un largo tiempo y que no fueron seleccionadas. Como se había visto anteriormente la primera respuesta es aceptada.

Se colocaron los atributos de numero de comentarios, edicion y score de la respuesta aceptada para compararla con el valor de las respuestas no aceptadas y se puede observar que la respuesta aceptada tiene más comentarios que la suma de los comentarios de todas las respuestas no aceptadas, de igual manera la cantidad de ediciones y el score.

4. Problemática a abordar

 

Aproximadamente el 50% de las preguntas realizadas en StackOverFlow no obtienen una respuesta en este popular sitio, por esta razón el objetivo principal que se desea abordar es la caracterización de estas preguntas en base al análisis de los atributos que se puedan extraer de los datos recolectados y generar nuevos atributos que permitan acercarse más a un resultado feaciente

En el análisis previo se observa que las variables o atributos que mayor aportan para discretizar las clases definidas son las fechas de publicación tanto de las preguntas como las respuestas y los threads generados por una pregunta, es decir los comentarios realizados en los dos ámbitos. Adicionalmente analizar la incidencia del score de los usuarios que participan con una respuesta y los tags relacionados a las preguntas.

5. Hipótesis

 

Después de la exploración de datos, en los que no logramos diferenciar características correlacionadas con las preguntas que obtuvieron y no obtuvieron una respuesta aceptada, planteamos las siguientes hipótesis

  • ¿A qué se debe que algunas preguntas en StackOverflow no tengan una respuesta?
  • ¿Es posible predecir si una respuesta tendrá un buen score?
  • ¿Las preguntas con ciertos tags siempre obtienen una respuesta?

6. Temas relacionados

 

Existen ya algunos estudios sobre estos sitios, y no solamente temas de la industria de tecnología sino también de sistemas Q&A en general, por ejemplo sobre Yahoo Answers, el artículo denominado Measuring effectiveness and user satisfaction in Yahoo[1], que analiza 3 puntos: que tan rápido una pregunta es respondida, que tan rápido una pregunta es aceptada por el usuario por que satisface su interrogante y cuál es la relación entre una respuesta que satisface al usuario y el resto de respuestas, éste análisis tiene como objetivo determinar la eficiencia del sistema y la satisfacción del usuario.

El mayor desafío se encuentra en seleccionar las características idóneas para realizar una buena clasificación o análisis de predictibilidad, ya que un sistema exchange involucra un ciclo en cada pregunta, y cada pregunta tiene un inicio y fin distintos.

Chirag et al [2] hace un estudio para predecir el tiempo de respuesta en StackOverflow, para su análisis selecciona características basadas en tags: como la popularidad del tag usado en una pregunta, tags populares, la probabilidad de que un conjunto de tags se muestren juntos en una pregunta, número de usuarios suscritos a los tags en base a las preguntas respondidas, features correspondientes a la reputación de los usuarios y sus tiempos de respuesta. De estas features la reputación del usuario determinada por sus tiempos de respuestas era la feature que proporcionaba mayor fiabilidad al modelo, seguido de la popularidad del tag

Elaborar una buena respuesta puede llevar cierto tiempo, aún cuando la respuesta sea inmediata, debe llevar el contenido suficiente y acertado, por esta razón no siempre la primera respuesta es aceptada cuando se trata de una respuesta sin ejemplos o vaga. El análisis del tiempo acompañado de la experiencia determinada a través de los tags y reputación del usuario es una buena combinación al hacer el análisis de predictibilidad.

Mining Successful Answers et al [3], es otro de los artículos que estudia como predecir si una respuesta será marcada como aceptada, los factores estudiados son: Calidad de la presentación, afecto, tiempo y reputación o score de la respuesta. A diferencia de Chirag [2], en este estudio se evalua la calidad de la respuesta con un análisis de sentimientos específico que pretende determinar el grado de afectividad del usuario que responde. En el resultado se obtuvo un mayor porcentaje de eficiencia en el atributo de presencia de código en la respuesta, actitud positiva, reputación de la respuesta y reputación del usuario.

Los dos estudios presentados coinciden en usar el tiempo de la respuesta y la reputación del usuario como características para determinar el éxito de una respuesta. En el presente proyecto se pretende además analizar los tags de las preguntas y su relación con la experiencia del usuario a través de su historial de respuestas.

REFERENCIAS

[1]. Chirag Shah (2011), Measuring effectiveness and user satisfaction in Yahoo.

[2]. Vasudev Bhat, Adheesh Gokhale, Ravi Jadhav, Jagat Pudipeddi, Leman Akoglu (2014) "Min(e)d Your Tags: Analysis of Question Response Time in StackOverflow".

[3]. Fabio Calefato, Filippo Lanubile, Maria Concetta Marasciulo, Nicole Novielli (2015), "Mining Successful Answers in Stack Overflow", Conference: MSR 2015 - The 12th Working Conference on Mining Software Repositories.

[4]. Muhammad A, Ahmed Shah M, Chanchal K. Roy, Kevin A. Schneider, Answering Questions about Unanswered Questions of Stack Overflow, Mining Software Repositories (MSR), 2013 10th IEEE Working.