¿Cuándo es el mejor momento para transmitir en Facebook Live? Analicé 5,000 publicaciones de Facebook para averiguarlo.

La transmisión en vivo en Facebook Live puede ser una poderosa estrategia de marketing para nuevas empresas y empresas. Pueden compartir conocimientos, proporcionar valor, obtener exposición y recopilar clientes potenciales de alta calidad.

Prepare su sesión de Facebook Live por adelantado. Investiga sobre tu público objetivo y elabora una agenda detallada. La sesión puede impulsar su negocio de forma espectacular.

Fui Jefe de Producto y Tecnología de mi inicio anterior relacionado con la detección de fraudes. Decidí probar Facebook Live como una nueva estrategia de marketing.

Todavía era bastante nuevo en ese momento. Una vez que finalizó una sesión de Facebook Live, las personas relevantes recibieron notificaciones de Facebook para unirse a la sesión. Esto aumentó aún más la exposición.

Hay muchas publicaciones que hablan sobre cómo construir mejor su sesión en vivo de Facebook. Discuten qué temas cubrir, cómo crear una agenda, ángulos de cámara, duración de la sesión y más.

Pero hay una pieza del rompecabezas que los dueños de negocios y los especialistas en marketing a menudo tienden a olvidar o no prestan atención: ¿ Cuándo es el mejor momento para transmitir su sesión de Facebook Live?

Puede responder a esta pregunta utilizando una conjetura basada en su familiaridad con el público objetivo.

Por ejemplo:

  • Las mamás embarazadas están listas para consumir su sesión en vivo el lunes por la tarde.
  • Los adolescentes de entre 18 y 22 años tienen la mentalidad adecuada el sábado por la mañana.

Pero hay tantos datos a nuestro alrededor que podemos usar con unos pocos clics de un botón. De hecho, se queda atrás si no hace un uso adecuado de algunos de los datos disponibles.

Casi todas las plataformas de marketing o redes sociales abren servicios API. Usted, como emprendedor tecnológico, puede consumirlos fácilmente. Estos datos pueden proporcionar conclusiones valiosas que pueden impulsar sus objetivos comerciales más allá de sus competidores.

Este enfoque a menudo se denomina decisiones basadas en datos .

Una vez que comience a justificar alguna o al menos la mayoría de sus decisiones comerciales utilizando datos que posee o datos que puede recopilar de diferentes recursos, puede dejar de adivinar y comenzar a tomar decisiones basadas en datos.

Me gusta pensar en las decisiones basadas en datos como crowdsourcing. Lior Zoref participó en esta charla TED. Invitó a un buey al escenario y le pidió a la audiencia que adivinara su peso. Si vio esto, probablemente se sintió abrumado por la precisión con la que se comparó el promedio de la multitud con el peso real del buey: ¡1,792 libras o 1795 libras!

Cuando está haciendo conjeturas sobre sus objetivos comerciales como individuos, no es diferente a cualquier persona sentada entre la multitud y tratando de evaluar el peso del buey. Incluso puede ser usted quien adivinó 300 libras u 8000 libras, lo que puede costarle a su negocio muchos gastos innecesarios.

Pero, si está utilizando la sabiduría de la multitud para tomar decisiones basadas en datos, lo más probable es que esté por delante de cualquier otra persona. En términos comerciales, estará por delante de sus competidores.

No soy un comercializador puro. Pero con habilidades básicas de análisis de datos puedo impulsar mi negocio en todos los aspectos, incluido el marketing.

Le mostraré una guía práctica paso a paso sobre cómo acceder a los datos de Facebook. Luego cómo analizarlo en función de nuestras necesidades sobre el tiempo optimizado para transmitir en Facebook Live.

Para seguir esta guía necesitas:

  • Una cuenta de Facebook
  • Un grupo de Facebook que le gustaría analizar

    Si es un grupo privado, entonces debes ser miembro del grupo.

  • Python 2.7 instalado
  • Cuaderno Jupyter instalado
  • Biblioteca de Python de la API de gráficos de Facebook instalada

Un cuaderno de Jupyter es una herramienta recomendada para el análisis de datos en Python. Tiene muchos aspectos destacados. Le permite ejecutar fragmentos de código y guardar los resultados en la memoria. Por lo tanto, no ejecutará todos sus scripts una y otra vez cada vez que implemente un cambio menor. Esto es crucial cuando se realizan análisis de datos porque algunas tareas pueden requerir mucho tiempo de ejecución.

Aunque no es esencial, recomiendo trabajar dentro de un entorno virtual de Python. Aquí hay una publicación que escribí sobre las ventajas de un entorno virtual al usar Python.

Recomiendo trabajar en un entorno Ubuntu cuando se realizan análisis de datos con portátiles Jupyter.

Paso 1: obtener la identificación del grupo de Facebook

To get data from Facebook API, we need to specify the ID of the entity we want to get data from, in our case, a Facebook group.

Lookup-id.com is a nice tool you can use to find the ID of a group based on its URL. Copy the URL of your group and paste it in the search bar.

In this article, we will use the group: Web Design and Development.

ID: 319479604815804

Step 2 — Getting to know the Graph API Explorer

To get the most out of Facebook API besides documentation, Facebook has developed a playground for developers called the Graph API Explorer.

The Graph API Explorer enables us to get a temporary access token and start examining the capabilities that Facebook API has to offer.

Click on Get Token. Don’t select any permission. Click Get Access Token .

Facebook API has many endpoints you can use. In this guide, we are going to use two main endpoints:

  • The group endpoint
  • The reactions endpoint

To figure out the structure of the response you’re expecting to get, specify the endpoint URL and click Submit.

Let’s examine the URL endpoint for grabbing the last posts from the group’s feed. Type this URL in the Graph API Explorer:

319479604815804/feed

and hit Submit.

You should now see the last posts from the group’s feed in a JSON structure. It contains the post’s content, its id and the updated time. By clicking on one of the id’s and adding to the end of the URL:

319479604815804_1468216989942054/reactions?summary=total_count

You should see a list of the reactions for the specific post, and a summary of the total count of reactions.

This way you can play around with all the features the Facebook API has to offer.

Another tool for examining API endpoints of APIs which don’t offer a playground is Postman. You can read more about this tool and essential tools for web developers.

Step 3 — Our plan and assumptions

Our goal is to find the best time to have a Facebook Live session in the group that contains our target audience. To do that, we assume that the more activity there is in the group at a specific time, the most likely our Facebook Live session will gain more traction.

So our goal now is to figure out when there is a peak in the group’s activity over time. And by when I mean a specific weekday and time.

To do that, we are going to grab the last 5,000 posts from the group’s feed. Then we’ll plot the distribution of the times they were updated.

We assume that longer posts indicate more activity in the group because members spend more time in the group writing them. So, our next step will be to take into consideration the length of each post in the distribution.

Reaction on Facebook is probably a great indication of people engaging with a specific post. Thus, our last step will be to collect the total number of reactions for each post. Then take that into account in the distribution of activity over weekdays and hours.

Because reactions may come after the post, we should be cautious using this data analysis approach.

Step 4 — Let’s analyze some data!

To start a Jupyter notebook, you should execute:

ipython notebook

and then choose New → Python 2.

To analyze and plot the data, we are going to use the numpy and matplotlib libraries. These are very popular Python libraries you should use to better analyze your data.

Let’s import all the libraries we need:

import matplotlib.pyplot as pltimport numpy as npimport facebookimport urlparseimport datetimeimport requests

and specify our access token and group id:

ACCESS_TOKEN = 'INSERT_ACCESS_TOKEN_HERE'GROUP_ID = '319479604815804' # Web Design and Development group

Then, let’s initialize the API object with our access token:

graph = facebook.GraphAPI(ACCESS_TOKEN)

Now we want to grab the posts from the group’s feed. To avoid errors during the API calls, we will limit each API call to 50 posts and iterate over 100 API calls:

posts = []url = "{}/feed?limit=50".format(GROUP_ID)until = Nonefor i in xrange(100): if until is not None: url += "&until={}".format(until) response = graph.request(url) data = response.get('data') if not data: break posts = posts + data next_url = response.get("paging").get("next") parsed_url = urlparse.urlparse(next_url) until = urlparse.parse_qs(parsed_url.query)["until"][0]
In each API call, we specify the until parameter to get older posts.
Now, let’s organize the posts into weekdays and hours of the day:
weekdays = {i: 0 for i in xrange(7)}
hours_of_day = {i: 0 for i in xrange(24)}
hours_of_week = np.zeros((7,24), dtype=np.int)for post in posts: updated = datetime.datetime.strptime(post.get("updated_time"), "%Y-%m-%dT%H:%M:%S+0000") weekday = updated.weekday() hour_of_day = updated.hour weekdays[weekday] += 1 hours_of_day[hour_of_day] += 1 hours_of_week[weekday][hour_of_day] += 1

and then, plot the results using matplotlib bar charts:

plt.bar(weekdays.keys(), weekdays.values(),)plt.show()
plt.bar(hours_of_day.keys(), hours_of_day.values(),)plt.show()

With only this basic analysis, we can already learn a lot about better or worse time slots for broadcasting to this group. But it does not seem informative enough. Maybe because the data is divided into 2 graphs and missing some critical information.

Let’s try to present a heat map of the data, that enables us to see 3D information:

plt.imshow(hours_of_week, cmap="hot")plt.show()

Well, this is much better! We can see that the group is very active on Monday to Friday between 6:00 am and 10:00 am.

Now let’s take into consideration to post length and see how it affects the results:

weekdays_content = {i: 0 for i in xrange(7)}hours_of_day_content = {i: 0 for i in xrange(24)}hours_of_week_content = np.zeros((7,24), dtype=np.int)for post in posts: updated = datetime.datetime.strptime(post.get("updated_time"), "%Y-%m-%dT%H:%M:%S+0000") weekday = updated.weekday() hour_of_day = updated.hour content_length = len(post["message"]) if "message" in post else 1 weekdays_content[weekday] += content_length hours_of_day_content[hour_of_day] += content_length hours_of_week_content[weekday][hour_of_day] += content_length

The heatmap we get:

This is nice but should be treated with caution. On one hand, we can see a very specific time that is the optimized time slot to have our Facebook Live session. But, it might be an outlier of a super long post.

I’ll leave it to you to figure it out in your next data analysis project. Take a larger amount of posts or grab an older batch of 5000 posts from the group’s feed.

To take reactions into account when analyzing the data, we need to make another API call for each post.

This is because it’s a different API endpoint:

weekdays_reactions = {i: 0 for i in xrange(7)}hours_of_day_reactions = {i: 0 for i in xrange(24)}hours_of_week_reactions = np.zeros((7,24), dtype=np.int)for i, post in enumerate(posts): url = "//graph.facebook.com/v2.10/{id}/reactions?access_token={token}&summary=total_count".format( id=post["id"], token=ACCESS_TOKEN )
headers = { "Host": "graph.facebook.com" }
response = requests.get(url, headers=headers)
try: total_reactions = 1 + response.json().get("summary").get("total_count") except: total_reactions = 1
updated = datetime.datetime.strptime(post.get("updated_time"), "%Y-%m-%dT%H:%M:%S+0000") weekday = updated.weekday() hour_of_day = updated.hour weekdays_reactions[weekday] += total_reactions hours_of_day_reactions[hour_of_day] += total_reactions hours_of_week_reactions[weekday][hour_of_day] += total_reactions

We used a low-level approach by specifying the exact HTTP request and did not use the Facebook Python library. This is because that library doesn’t support the last version of the Facebook API required when querying the reactions endpoint.

The heat map generated from this data:

We can conclude that the three approaches we used agree on Monday and Wednesday, 6:00 am to 7:00 am.

Conclusions

Data analysis can be challenging and often requires creativity. But it also exciting and very rewarding.

After choosing our time to broadcast on Facebook Live based on the analysis presented here, we had a huge success and a lot of traction during our Live session.

I encourage you to try and use data analysis to make data-driven decisions in your next business move. And start thinking in terms of data-driven decisions.

You can find the Github repository here.

I originally published this on CodingStartups.