Skip to content

Instantly share code, notes, and snippets.

@fforbeck
Last active December 24, 2015 07:19
Show Gist options
  • Save fforbeck/6762555 to your computer and use it in GitHub Desktop.
Save fforbeck/6762555 to your computer and use it in GitHub Desktop.

Interesse dos usuários

Motivação

Para empresas que trabalham com publicidade online, mais precisamente DSPs e suas plataformas de Real-time Bidding é muito importante coletar a analisar informações a cerca do comportamento e interesses dos usuários enquanto navegam na internet. Sendo assim, descrevo nesse graph-gist uma abordagem básica que pode ser utilizada para analisar tais dados, considerando um determinado período de tempo e os produtos visualizados por cada usuário. Vamos considerar que alguns personagens de Breaking Bad navegaram na internet há alguns dias e encontraram alguns produtos, elementos químicos e, possuem interesse em comprá-los. Tal informação será de extrema importância no momento de dar um lance em um leilão de publicidade, sabendo o perfil e interesse de um determinado usuário. Então armazenamos tais usuários, produtos e datas das visualizações para que possamos extrair essas informações futuramente.

Grafo

CREATE
(Walter { name:'Walter White' }),
(Skyler { name: 'Skyler White' }),
(Jesse { name: 'Jesse Pinkman' }),
(Hank { name:'Hank Schrader' }),
(Saul { name: 'Saul Goodman' }),
(Gus { name: 'Gustavo Fring' }),
(Br { name: 'Brom' }),
(K { name: 'Kalium' }),
(Ba { name: 'Barium' }),
(Zr { name: 'Zirkonium' }),
(Fe { name: 'Eisen' }),
(Al { name: 'Aluminium' }),
(Li { name: 'Lithium' }),
(Mn { name: 'Mangan' }),
(P { name: 'Phosphor' }),
Walter-[:INTERESTED_IN {day:1379732400000}]->Br,
Walter-[:INTERESTED_IN {day:1379732400000}]->Ba,
Walter-[:INTERESTED_IN {day:1380510000000}]->Fe,
Walter-[:INTERESTED_IN {day:1380510000000}]->Li,
Walter-[:INTERESTED_IN {day:1380510000000}]->P,
Skyler-[:INTERESTED_IN {day:1379732400000}]->Br,
Skyler-[:INTERESTED_IN {day:1379732400000}]->Ba,
Jesse-[:INTERESTED_IN {day:1379732400000}]->Br,
Jesse-[:INTERESTED_IN {day:1379732400000}]->Ba,
Jesse-[:INTERESTED_IN {day:1380078000000}]->K,
Jesse-[:INTERESTED_IN {day:1380337200000}]->Zr,
Hank-[:INTERESTED_IN {day:1380250800000}]->Fe,
Hank-[:INTERESTED_IN {day:1380337200000}]->Al,
Saul-[:INTERESTED_IN {day:1380423600000}]->Mn,
Gus-[:INTERESTED_IN {day:1380078000000}]->Br,
Gus-[:INTERESTED_IN {day:1380423600000}]->Ba,
Gus-[:INTERESTED_IN {day:1380337200000}]->Li,
Gus-[:INTERESTED_IN {day:1380250800000}]->P

Casos de uso

Users interested in some products after the day Tue Sep 17 2013.

Cypher, give me all users that are interested in some products after the day 1379451489693 (Tue Sep 17 2013). Here you should return all the users from my graph :)

START
u = node(*)
MATCH u-[r:INTERESTED_IN]->p
WHERE r.day >= 1379451489693
RETURN u.name as user, type(r) as relationship, p.name as product, r.day as day

Users interested in some products between dates (Tue Sep 25 2013) and (Tue Sep 27 2013)

Cypher, who are the users that are interested in some products between dates 1380078000000 and 1380250800000?

→ Here we should see the users: Jesse, Gus and Hank

START
u = node(*)
MATCH u-[r:INTERESTED_IN]->p
WHERE r.day >= 1380078000000 AND r.day <= 1380250800000
RETURN u.name as user, type(r) as relationship, p.name as product, r.day as day

Users interested at least in 3 products

Cypher, which users are interested at least in 3 products?

→ Here we should see the users: Walter, Jesse and Gus

START
u = node(*)
MATCH (u)-[:INTERESTED_IN]->(p)
WITH u as user, count(p) as products
WHERE products >= 3
RETURN user.name as Users

Users interested at least in 1 product after (Tue Sep 27 2013)

Cypher, which users are interested at least in 1 product and saw it after (Tue Sep 27 2013)?

→ Here we should see the users: Walter, Hank, Gus, Jesse and Saul

START
u = node(*)
MATCH (u)-[r:INTERESTED_IN]->(p)
WHERE r.day >= 1380250800000
WITH u as user, count(p) as products
WHERE products >= 1
RETURN user.name as Users

Top products

Cypher, what are the top 2 interesting products?

→ Here we should see the products: Br and Ba

START
u = node(*)
MATCH u-[r:INTERESTED_IN]->(p)
WITH p, count(r) as interested_users
RETURN p.name as Products, interested_users as Interested_Users
ORDER BY interested_users DESC
LIMIT 2

Top products

Cypher, has Walter White interest in product Eisen today (Tue Sep 30 2013)?

→ Here we should that Walter are interested

START
u = node(*)
MATCH u-[r:INTERESTED_IN]->(p)
WHERE u.name = 'Walter White' AND r.day = 1380510000000 AND p.name = 'Eisen'
WITH count(p) as products
RETURN products > 0 as Has_interest_in_Eisen

Conclusão

Dessa forma podemos extrair dados interessantes a respeito dos comportamentos e interesses de um grupo de usuários e de um único indivíduo. Essas informações podem ser levadas em consideração na hora de dar um lance em um leilão. Por exemplo, sabemos que Walter White possui interesse no produto Eisen, caso exista um espaço de publicidade em algum site relacionado a este produto, podemos aumentar o valor do lance no leilão pois há mais chances de Walter White comprar o produto do que alguém que ainda não o tenha visto.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment