Jobs to be Done, onde estratégia e Inteligência Artificial se encontram.
Como defender sua empresa das inovações tecnológicas disruptivas? Pessoas. Entendendo profundamente as pessoas, e a relação delas com seus produtos. Clayton Christensen, professor de Harvard e um dos mais influentes autores do mundo dos negócios, se destaca, entre muitas coisas, por duas teorias:
- Dilema da Inovação, que explica justamente como inovações tecnológicas disruptivas podem abalar empresas estabelecidas, como a Kodak
- Jobs to be Done, que explica justamente como evitar isso, entendendo profundamente as pessoas, suas necessidades, e para que elas utilizam seus produtos.
Nós partimos de um mundo industrial onde 1 tamanho atendia todo mundo (1 size fits all), pois dado o alto custo das máquinas, dos meios de produção, era importante vender o máximo possível de produtos feitos com uma dada máquina, sem customização. O cliente deveria se encaixar no produto. Hoje, com a revolução digital, os meios de produção são extremamente acessíveis. E por isso, os clientes podem ter seus desejos individuais atendidos. E se sua empresa não atender, alguma vai aproveitar a oportunidade e fazê-lo. Abaixo, apresentaremos de uma forma divertida, a teoria que permite entender os clientes e seus desejos, o Jobs to be Done:
- Apresentaremos o case do milkshake, uma divertida adaptação do celebre case apresentado pelo proprio Clayton Christensen para ilustrar sua teoria
- Analisaremos esse case a partir do conceito de Clustering, uma técnica de aprendizado não-supervisionado, amplamente empregada em Inteligência Artificial
- Ilustraremos a técnica de Clustering a partir dos dados deste case (milkshake), com um código em Python.
Jack e seu amado Milk Shake
Jack é um pirata. Bom, já falei disso nesse blog. Mas ele é um pirata descolado, e não segue nem as regras da própria pirataria. Nem só de rum vive Jack. Ele curte também um bom milkshake.
Seu milkshake favorito é o do McTortuga, uma lanchonete super famosa nos mares do Caribe. Eles possuem, além das vendas no salão, um sistema de Sail-Thru, onde o lanche pode ser entregue no próprio navio. Chegando perto do McTortuga, o celular de Jack já apita. Clicando no aplicativo da lanchonete, este já abre nos seus pedidos favoritos. É só ele clicar e a compra já é registrada. O preço é descontado da sua carteira digital, e o lanche começa a ser preparado. Em poucos minutos, já é possível ver o corvodrone, um robô voador em formato de corvo, do McTortuga chegando ao convés, identificando Jack e entregando sua encomenda. E é sempre a mesma, um belo milkshake.
Jack segue alegre para sua próxima aventura saboreando o milkshake. Mas desta vez ele está diferente, está mais gostoso! Jack fica muito, muito feliz! Mas um questionamento vem à sua mente: Como eles fazem para adivinhar que Jack queria um milkshake daquele jeito? Será algum tipo de magia? Teriam eles contratado algum místico para ler as mentes dos piratas?
No seu caminho para a próxima aventura, Jack observa um barco de pesca. E esse barco claramente vai em direção ao McTortuga. Alguns minutos depois, ele vê outro barco de pesca, indo em direção ao mesmo lugar. E começa a se questionar: O que é que esse lugar tem, que é capaz de atrair tanto Piratas quanto Pescadores? Tem de ser alguma magia, não pode ser. Algum feitiço, não tem como. Essas perguntas não saem da sua mente:
- Como o milkshake é tão gostoso, parece ter sido feito pra ele?
- Como o mesmo lugar consegue agradar diferentes clientes, como Piratas e Pescadores?
E eis que Jack não se aguenta mais de curiosidade, e pergunta ao seu papagaio AI. E A.I. responde com um termo em Inglês:
- Jobs to be Done
Mas afinal, o que é Jobs to be Done?
Há não muito tempo atrás, um grande estudioso de estratégia fez uma pesquisa incrível sobre, acredite, milkshakes! E essa teoria veio daí. E o Papagaio A.I. vai tentar descrevê-la para Jack através do seu uso pelo McTortuga.
Tudo se iniciou por uma pesquisa da qual Jack nem lembra mais. Há cerca de 1 mês, quando o corvodrone veio entregar o milkshake, perguntou a Jack se ele gostaria de responder a uma pesquisa rápida para poderem melhorar seus produtos. Jack prontamente respondeu, já que adora os produtos deles e não tinha muito mais o que fazer além de navegar.
Nesta pesquisa, o corvodrone perguntou coisas como:
- A que horas ele costumava comprar milkshake?
- Jack comprava sempre o mesmo item ou comprava com outras coisas?
- Onde Jack consumia o milkshake?
- Por que Jack consumia aquele milkshake?
Jack explicou que, sendo um pirata, passava sempre no McTortuga pela manhã, antes de iniciar sua rotina diária de aventuras, invasões e saques. O milkshake era seu café da manhã, algo que alegrava seu dia e servia de distração no caminho até o trabalho. Esse caminho era longo e chato, ele tinha que ficar olhando para o mar por muito tempo, porém não poderia se distrair e nem tirar as mãos do leme, pois a qualquer momento uma pedra poderia aparecer pelo caminho e ele teria que desviar, ou um inimigo poderia aparecer e ele teria que agir. Assim, o Job to be Done pelo milkshake aqui era o de servir de café da manhã e entretenimento para ele, o mantendo acordado porém com os olhos no mar. Ele já havia tentado utilizar outras coisas para esse mesmo Job to be Done, mas não foram muito eficientes.
- Job to be Done para Jack: Café da Manhã e Entretenimento
Uma vez, Jack tentou jogar vídeo game para se manter acordado, mas esqueceu de olhar pro mar e quase bateu o navio. Ele só viu a pedra quando estava muito perto, virou o navio com tudo e fez metade da tripulação cair no mar. Além do atraso causado na viagem pois ele teve que resgatar todo mundo, isso quase gerou um motim no barco, e ele desistiu do vídeo game.
Outra vez ele tentou comer salgadinhos no lugar do Milk-Shake. Porém, com os salgadinhos a mão dele ficava suja, e ele colocava essa mão suja no leme. Resultado: Jack teve que navegar por dois dias com o leme cheirando a salgadinho de queijo parmesão. Ele ficava enjoado com frequência por isso, e a experiência não foi nada boa.
Por último, o corvodrone do McTortuga perguntou a Jack o que ele mudaria no milkshake, e Jack disse que poderia ser maior, para alimentar mais e durar mais, e menos doce, pois como ele estava iniciando a viagem, algo muito doce o deixava enjoado, e o impedia de beber mais milkshake.
- O milkshake perfeito para Jack: Maior volume, e menos doce.
O Papagaio A.I. contou que através da pesquisa a lanchonete descobriu que muitos piratas como Jack que frequentavam o mesmo lugar tinham para o milkshake o mesmo Job to be Done. E descobriu também como poderia mudor o milkshake para que ele atendesse a esse Job to be Done melhor ainda.
Jack ficou satisfeito com a explicação, porém retornou com uma dúvida mais forte ainda:
Como o papagaio A.I. poderia explicar que, se eles mudaram o milkshake para atender os Piratas, haviam tantos pescadores indo pra lá?
Já comemorando por ter encontrado uma pergunta que A.I. não poderia responder, Jack foi pego de surpresa mais uma vez quando o papagaio disse: Diferentes públicos tem diferentes Jobs to be Done, e para eles existem diferentes soluções.
Diferentes clientes, diferentes Jobs to be Done.
O Papagaio A.I. conta aí a história da pescadora Elise. Ela é uma mãe dedicada, tem duas filhas pequenas que ficam em casa o dia inteiro, estudando, cozinhando, cuidando uma da outra e aguardando seu retorno. Obviamente o principal cardápio na casa de Elise é peixe, mas por mais fresco e bem preparado que seja, todo dia a mesma comida enjoa. Por isso, sempre que pode, Elise dá um presente a ela mesma e às filhas. Ao final da pescaria, ela passa pelo McTortuga e compra o combo família, com três Hambúrgueres, batata frita gigante e três milkshakes. Ela leva esse combo para casa, e quando chega a expressão de alegria das filhas já compensa todo o cansaço do dia. Essa expressão fica mais feliz ainda quando elas notam que além do prato diferente, tem o Milk-Shake que serve de bebida e sobremesa. Aqui, o Job to be Done do milkshake é diferente. Ele é uma doce recompensa para um dia duro, de trabalho ou de espera pela mãe. Um gesto de carinho, de que ela não esqueceu das filhas, um presente.
- Job to be Done para Elise: Bebida, sobremesa e Recompensa.
E para melhorar, Elise diz que o milkshake poderia ser menor, assim elas não ficariam com aquele sentimento que comeram demais após sanduiches, batata e bebida, e poderia também ser um pouco mais doce, assim seria uma perfeita sobremesa.
- O milkshake perfeito para Elise: Menor volume, mais doce.
Jack entende, mas faz um questionamento prático: Contando essa história, fica claro o que fazer, e parece fácil. Mas como conseguir identificar o Job to be Done em uma empresa como milhares de clientes? Como fazer essas relações? Como saber exatamente o que fazer?
E o Papagaio A.I. explica que uma técnica de Machine Learning chamada Clustering pode ajudar nesse ponto.
Clustering: Onde a Inteligencia Artificial encontra os Jobs to be Done.
A técnica de clustering, de forma bem geral, diz respeito a agrupar elementos semelhantes.
Por uma questão de simplificação nós vamos exemplificar abaixo o modelamento a partir dos parâmetros resultantes do Jobs to be Done, ou seja, variação de volume e açúcar. Porém, seguindo a mesma idéia poderiamos também modelar pelas características do Jobs to be Done (Alimentação, Entretenimento, Recompensa) ou até mesmo pelas emoções entregues aos clientes, transformando essas variáveis em escalas matemáticas.
Neste caso, podemos modelar o problema da seguinte forma:
Horário: O horário define uma clara distinção entre os Jobs to be Done. Pela manhã os clientes estão indo para o trabalho, ao final do dia estão voltando. Pela manhã o consumo é individual, pelos piratas, e a noite é em grupo, pelas famílias, e assim vai. E essas características definem distintos Jobs to be Done: Pela manhã, Café da Manhã e Entretenimento, a noite, Sobremesa e Recompensa.
Tamanho: Dados os distintos Jobs to be Done, temos que:
- Manhã: Volume maior.
- Noite: Volume menor.
Açúcar: Dados os distintos Jobs to be Done, temos que:
- Manhã: Menos doce.
- Noite: Mais doce.
Abaixo apresentamos um exemplo de respostas para a pesquisa.
Analisando as tabelas, conseguimos notar uma divisão clara por horário, e principalmente:
Dependendo da forma como observemos os dados, a conclusão é diferente.
Se olharmos o quanto os clientes gostariam que variasse no açúcar e no volume, observando os dados totais, o resultado seria 0%. Na média de todo mundo, está tudo bem. Porém, quando clusterizamos, dividimos os grupos de acordo com o horário, o resultado é bem diferente. Pelas linhas cinza-escuro, o grupo da manhã quer um milkshake maior e com menos açúcar, e o grupo da noite quer exatamente o contrário, menos volume e mais açúcar.
Parênteses: Mas o que isso tem a ver com o dilema da inovação? De maneira resumida: Se, antigamente, na época industrial, só você tivesse uma máquina de milkshake, vc faria o máximo pelo menor preço, obrigando todo mundo a beber o mesmo milkshake. Porém, hoje os meios de produção estão mais acessíveis. E se você não atender bem o seu cliente, alguém vai.
Conseguimos notar essa divisão entre os horários pela variância (podemos entender variância como algo que indica o quanto os valores de um dado conjunto são semelhantes, ou mais precisamente, o quanto se distanciam da média do grupo). Se consideramos dois clusters, diminuímos a variância. Se consideramos dois clusters, temos resultados mais precisos para cada um, e portanto atendemos melhor cada cliente.
Sendo assim, o Papagaio A.I. nos explicou como o McTortuga conseguiu atender bem dois públicos distintos: Entendendo quem são esses públicos e como eles podem ser agrupados (clusterizados), entendendo qual o Job to be Done para cada um desses públicos, e desenvolvendo/adaptando seus produtos para atender tais Job to be Dones.
A seguir vamos descrever, a partir desse exemplo, como os clusters poderiam ser calculados em Python.
Clustering do problema do milkshake. Exemplo em Python (Jupyter Notebook)
No código abaixo, nós vamos:
1 — Importar os dados da Pesquisa (formato .csv)
2 — Selecionar só os dados úteis para o clustering (no caso, dados numéricos)
3 — Ajustar os dados (substituindo virgula por ponto, para ficar em notação americana)
4 — Criar os clusters a partir da técnica kmeans
5 — Fazer a representação gráfica dos clusters
# Início — Aqui importamos as bibliotecas de Python necessárias para rodas as rotinas
#codigo — python
import pandas as pd #pandas é uma biblioteca para manipulação de dados — tabelas, datasets, etc
import numpy as np # NumPy é uma biblioteca que ajuda na manipulação de dados numéricos, vetores e matrizes
import matplotlib as mpl #MatPlot é uma biblioteca que ajuda a criar gráficos
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans #sklearn é uma biblioteca que ajuda em operações estatísticas e de machine learning. Aqui a utilizaremos para criar os clusters
#Importar os dados
#A variavel address diz onde está o arquivo de dados da pesquisa. Substitua abaixo onde está C:/… pelo endereço dos dados no seu computador.
address=”C:/Users/chris/Desktop/Empreendedorismo/Job_To_Be_Done/Dados_Job_To_Be_Done — Dados_Puros.csv”
#O comando abaixo utiliza a biblioteca pandas (pd) para ler o arquivo .csv a partir do endereço dado acima, e carregar os dados no dataset criado, o jtbd
jtbd = pd.read_csv(address)
#Visualizar os dados
#esse comando serve para ver os dados, dar uma olhadinha e ver se tá tudo bem, se carregou direito
display(jtbd)
#Criar tabela (subset) com os dados importantes para o clustering
#no comando abaixo, é criado, usando pandas (pd) um novo dataset somente com os dados que serão utilizados no cluster. Mantive profissão só para ilustrar na tabela que o cluster vai acabar resultando em uma separação por profissão, mas os dados utilizados serão horário, ajuste_volume e ajuste_acucar, cujos endereços das variáveis correspondentes estão dentro dos colchetes. Assim, o comando junta (concatena) as colunas jtbd.profissao, jtbd.horario, jtbd.ajuste_volume e jtbd.ajuste_acucar em uma nova tabela.
cluster_jtbd=pd.concat([jtbd.profissao, jtbd.horario, jtbd.ajuste_volume, jtbd.ajuste_acucar], axis=1,ignore_index=True)
#Aqui nomeamos as colunas, logo a seguir, trocamos as virgulas por pontos, com o comando str.replace
cluster_jtbd.columns=[‘profissao’,’horario’,’volume’,’acucar’]
cluster_jtbd[“volume”]=cluster_jtbd[“volume”].str.replace(‘,’,’.’)
cluster_jtbd[“acucar”]=cluster_jtbd[“acucar”].str.replace(‘,’,’.’)
# e aqui garantimos que as duas colunas a serem utilizadas pra definir os clusters estão em formato numérico decimal (float).
cluster_jtbd[‘volume’] = cluster_jtbd[‘volume’].astype(float)
cluster_jtbd[‘acucar’] = cluster_jtbd[‘acucar’].astype(float)
Visualizar Dados
#aqui visualizamos a nova tabela, pra ver se tá tudo certo
display(cluster_jtbd)
Análise de Cluster pelas características do produto: Volume e Quantidade de Açúcar
# Aqui calculamos os clusters usando a tecnica kmeans. Indicamos que queremos 2 clusters (n_clusters=2), que as colunas utilizadas serão volume e açucar (fit), e que queremos saber quais são as centroides dos clusters, pra poder visualizar depois no gráfico.
kmeans_2 = KMeans(n_clusters=2).fit(cluster_jtbd[[‘volume’, ‘acucar’]])
centroids_2 = kmeans_2.cluster_centers_
# aqui adicionamos os clustes calculados anteriormente à tabela, pra saber em qual cluster cada linha caiu.
cluster_jtbd[‘kmeans_2’] = kmeans_2.fit_predict(cluster_jtbd[[‘volume’, ‘acucar’]])
#E aqui damos uma olhadinha no resultado
print(cluster_jtbd)
Representacao Grafica do Cluster
#Aqui definimos as cores de acordo com o cluster
# criando a função abaixo, para marcar uma dada cor para cada cluster
def set_color(kmeans_2):
if kmeans_2 == 0:
return ‘red’
if kmeans_2 == 1:
return ‘blue’
else:
return ‘black’
# criando uma nova coluna para marcar a cor, e marcamos utilizando a função criada acima
cluster_jtbd[‘color’] = cluster_jtbd[‘kmeans_2’].apply(set_color)
#Aqui apresentamos os clusters de acordo com a cor. Os distintos clusters estão marcados em azul e vermelho, e o centro do cluster é sinalizado em verde.
plt.scatter(cluster_jtbd.volume, cluster_jtbd.acucar, c= cluster_jtbd.color, s=50, alpha=0.5)
plt.scatter(centroids_2[:, 0], centroids_2[:, 1], c=’green’, s=50)
plt.xlim(-1,1)
plt.ylim(-1,1)
plt.xlabel(“volume”)
plt.ylabel(“acucar”)
plt.show()
# Fim. Esse foi o nosso algoritmo que ilusta o Jobs to be Done dos Piratas e Pescadores de nossa história :)
Links úteis:
Notebook Jypiter com os comandos descritos aqui:
Dados da Pesquisa, para utilização no notebook:
Jobs to be Done: Clayton Christensen´s Milkshake Marketing
Innovator´s Dilemma — Dilema da Inovação
Competing against luck (livro sobre Jobs to be Done)