Top Banner
Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web Santiago Bel Sergio Espeja
41

Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Jun 23, 2015

Download

Technology

Sergio Espeja

Inteligencia Artificial en ruby on rails para optimizar automáticamente la publicidad de una aplicación.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Santiago BelSergio Espeja

Page 2: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Inteligencia Artificial

• “La ciencia y la ingeniería de hacer las máquinas inteligentes", John McCarthy

• Algoritmos que resuelven problemas inteligentes

Page 3: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Usos de la IA

• Planificación de procesos• Diagnosticar problemas• Interpretación de escritura manual• Lenguaje natural• Reconocimiento del habla• Reconocimiento facial• ...

Page 4: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Métodos de IA• IA Convencional:

– Sistemas expertos, redes bayesianas, ...

• Clasificadores:– Redes neuronales, k-nearest neighbor algorithm,

clasificador naive bayes, árboles de decisión, ...

• Inteligencia computacional:– Sistemas de lógica difusa (fuzzy systems),

algoritmos genéticos, ...

Page 5: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Algoritmos genéticosaplicados a la

publicidad

Page 6: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

¿y porqué algoritmos genéticos?• Alguien nos dió la idea…• Hay artículos muy buenos del sector del

marketing.– Not-So-Mad Science: Genetic Algorithms and Web

Page Design for Marketers, Matthew Syrett. (2005)

– http://www.marketingprofs.com/5/syrett6.asp?part=2

Page 7: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Algoritmos genéticos

• Basados en la teoría de Darwin

• Datos que evolucionan para encontrar de manera exacta o aproximada la solución óptima.

Photo by John Mu

http://www.flickr.com/people/jm123467890/

Page 8: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Definición académica• A genetic algorithm (GA) is a search technique

used in computing to find exact or approximate solutions to optimization and search problems. Genetic algorithms are categorized as global search heuristics. Genetic algorithms are a particular class of evolutionary algorithms (also known as evolutionary computation) that use techniques inspired by evolutionary biology such as inheritance, mutation, selection, and crossover (also called recombination).

Bla, bla, bla, …

Page 9: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Una definición más informal…

• http://www.youtube.com/watch?v=itgLHSZY6gE&feature=related

Page 10: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Aplicación del Algoritmo Genético

• Buscar la mejor combinación de banners que obtenga más clicks.

• Hacerlo automáticamente sin supervisión humana.

Page 11: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Darwin’s Evolution Theory…

• Hay una población (conjunto de individuos)

• Sólo los mejor adaptados sobreviven.

• Individuos se combinan entre ellos apareciendo nuevas generaciones

• La naturaleza provoca mutaciones, introduciendo así nuevas peculiaridades en la población

Page 12: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Requisitos del Algoritmo Genético

• Estructura de datos que representa al individuo.

¿cómo representamos las características de un individuo?

• Función de fitness:¿Cuándo un individuo es mejor que otro?¿Cómo calculamos que se adapta mejor?

• Función de recombinar¿Cómo creamos nuevas generaciones a partir de la

generación actual?

• Función de mutar¿Cómo introducimos nuevas peculiaridades en la

población?

Page 13: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Ruby y Algoritmos Genéticos

• Gga4r, General Genetic Algorithms for Ruby– http://gga4r.rubyforge.org/– Sergio Espeja & Santiago Bel, 2007

Instalar la libreríagem install gga4r

Page 14: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Representación del individuo• Cada combinación de anuncios candidata es un individuo en

nuestra población.• En nuestro ejemplo hay 4 slots para poner banners.

1 2 3 4

ad6 ad9 ad3 ad2

1

24 3

Objectivo:

Conseguir la mejor combinación

Page 15: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Persistencia en RoR

Page 16: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Representación del Individuo• Clase combinación. # id :integer# clicks :integer# impresiones_restantes :integer# mutaciones :integer# generaciones :integer# parejas :string #

NUM_POSICIONES = 4class Combinacion < ActiveRecord::Base has_many :posicion_anuncios serialize :parejas def click self.clicks += 1 self.update end def impresion self.impresiones_restantes -= 1 self.update endend

Guardamos las combinaciones en la relación posicion_anuncios

Controlamos los clicks y las impresiones de cada combinación.

Page 17: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Función de fitness

• http://www.metacafe.com/watch/29815/rock_monster/

Page 18: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Función de fitness

• En este caso una combinación de anuncios es mejor cuanto más elevado es su CTR (Click Through Ratio).

class Combinacion < ActiveRecord::Base

def fitness self.clicks.to_f/NUM_IMPRESIONES_COMBINACION.to_f end

end

Page 19: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Función recombine

• http://www.youtube.com/watch?v=VUZbk9KddR4&feature=related

Page 20: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Función recombine

• Se decide una posición al azar en el vector.• Entonces los dos vectores combinados se

mezclan dando 2 vectores de descendencia.

1 2 3 4 5

X ad9 ad3 X ad7

1 2 3 4 5

X ad9 ad3 ad4 ad5

1 2 3 4 5

ad1 ad2 ad3 ad4 ad5

1 2 3 4 5

ad1 ad2 ad3 X ad7

Padres Hijos

Page 21: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Función recombine (II)

def recombine(combinacion_2) cross_point = (rand * combinacion_2.posicion_anuncios.size-2).truncate+1 c1_a, c1_b = self.posicion_anuncios.separate(cross_point) c2_a, c2_b = combinacion_2.posicion_anuncios.separate(cross_point)

lista_1 = c1_a + c2_b lista_2 = c2_a + c1_b hijo_1 = Combinacion.new hijo_2 = Combinacion.new

NUM_POSICIONES.times do |pos| hijo_1.posicion_anuncios << PosicionAnuncio.create(:position => pos, :anuncio => lista_1[pos].anuncio) hijo_2.posicion_anuncios << PosicionAnuncio.create(:position => pos, :anuncio => lista_2[pos].anuncio) end hijo_1.save; hijo_2.save self.parejas ||= [] combinacion_2.parejas ||= [] self.parejas << combinacion_2.id combinacion_2.parejas << self.id self.update; combinacion_2.update return [hijo_1, hijo_2] end

Page 22: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Método Mutate

• Se escoge una posición aleatoria y se cambia su anuncio por otro al azar.

1 2 3 4 5

ad5 ad9 ad3 ad2 ad7

1 2 3 4 5

ad5 ad9 ad3 ad1 ad7

def mutate mutate_point = (rand * NUM_POSICIONES).truncate anuncios = Anuncio.find :all self.mutaciones += 1 self.posicion_anuncios[mutate_point].anuncio = anuncios[(anuncios.size*rand).truncate] self.save end

Page 23: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Inicialización y ejecución

• Crear población inicial (mayoritariamente se hace al azar)

• Crear el objeto GeneticAlgorithm con la población inicial

• Ejecutar: – Evolucionar y buscar los mejores individuos de la población.– Eliminar los que no obtengan buenos resultados.

Page 24: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Crear la población inicialapp/models/combinacion.rb

class Combinacion < ActiveRecord::Basedef self.create_random c = Combinacion.new c.impresiones_restantes = NUM_IMPRESIONES_COMBINACION anuncios = Anuncio.find :all NUM_POSICIONES.times do |pos| c.posicion_anuncios << PosicionAnuncio.create( :position => pos, :anuncio => anuncios[(anuncios.size*rand).truncate] ) end c.save return c endend

app/controllers/application.rb

@poblacion_actual = Array.new(NUM_COMBINACIONES_GENERACION).collect do Combinacion.create_random

end

Page 25: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

¿ Cómo evolucionan los

anuncios ?

Page 26: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Código de la evoluciónapp/controllers/application.rb

def escoge_combinacion @poblacion_actual = Combinacion.find :all # Si no existe ninguna combinación, creamos la población inicial @poblacion_actual = Array.new(NUM_COMBINACIONES_GENERACION).collect { Combinacion.create_random } \

if @poblacion_actual.empty? # Se elige una combinación al azar @combinacion = @poblacion_actual.select {|c| c.impresiones_restantes > 0}.shuffle!.first

# Si no quedan combinaciones por mostrar, la población actual evoluciona a una nueva generación if @combinacion.nil? @poblacion_actual.each {|c| c.generaciones +=1 } @ga = GeneticAlgorithm.new( @poblacion_actual, {:p_combination => 1.0,

:p_mutation => 0.1, :max_population => NUM_COMBINACIONES_GENERACION} )

@ga.evolve @extinguidos = @poblacion_actual - @ga.generations[-1] @extinguidos.each {|e| e.destroy} @poblacion_actual = @ga.generations[-1] @poblacion_actual.each do |c|

c.clicks = 0c.impresiones_restantes = NUM_IMPRESIONES_COMBINACIONc.update

end @combinacion = @poblacion_actual.select {|c| c.impresiones_restantes > 0}.shuffle!.first end @combinacion.impresion end

Page 27: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

¿Qué falta?

• Contar los clicksapp/controllers/application.rb

def cuenta_clicks @posicion_anuncio = PosicionAnuncio.find params[:id] @posicion_anuncio.combinacion.click redirect_to @posicion_anuncio.anuncio.urlend

Elegir la combinación en cada impresión

app/controllers/[controladores con vistas que muestren publicidad]

before_filter :escoge_combinacion, :except => "cuenta_clicks"

Page 28: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

¿Y en las vistas?

app/helpers/application_helper.rb

def pinta_banner(posicion, orientacion) imagen_path = if orientacion.downcase == "h“

@combinacion.posicion_anuncios[posicion-1].anuncio.banner_h else

@combinacion.posicion_anuncios[posicion-1].anuncio.banner_v end link_to image_tag(imagen_path),

:action => "cuenta_clicks",:id => @combinacion.posicion_anuncios[posicion-1]

end

app/views/[vistas que muestren publicidad]

<%= pinta_banner 4, "h" %>

Page 29: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Simulación

• www.publievo.com• www.publievo.com/combinaciones

Page 30: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

… o queréis más?

¿Preguntas …

Page 31: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Clasificador Naïve Bayes

• Aplica la regla de Bayes asumiendo variables independientes.

• Las clases deben ser conocidas

• Necesita entrenamiento

Photo by Aya Walraven Otakehttp://www.flickr.com/people/ayalan/

Page 32: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Ruby y los clasificadores Bayesianos

• Instalar la libreríagem install classifier

Ruby Classifier - Bayesian and LSI classification libraryhttp://classifier.rubyforge.org/Lucas Carlson, David Fayram II.

Page 33: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Ejemplo de Naïve Bayes:

• Servicio de atención al cliente de un servicio de hospedaje web.

• Dependiendo del asunto del email, enviar a:– Departamento Técnico– Departamento Comercial

• Necesitamos un grupo de entrenamiento con asuntos ya clasificados como “Técnico” o “Comercial”

Page 34: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Vamos a trabajar (I)

• Crear el clasificadorrequire 'rubygems'require 'stemmer'require 'classifier'

# Create the classifierclassifier = Classifier::Bayes.new('Technical', 'Commercial')

Page 35: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Grupos de entrenamiento (I)

• Grupo comercialcommercial = ["I already payed this invoice.","Do you have any discount for 1 year contract?","Do you have discounts?","Do you have any affiliate schema?","This is my new VISA no","I cannot see my invoices","When is finishing my free period?","I have a friend that is interested in your services, will you make us any offer?","I didn't use your services last mont. I shouldn't be charged","Do you have any kind of warranty?","Is it possible to freeze my account and continue after holidays?","I don't want to continue with your services.","Great service! Can I upgrade my account?","Where are the differences between shared and private hosting?"]

Page 36: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Grupos de entrenamiento (II)

• Grupo técnicotechnician = ["I have limit of quoata exceeded and I cannot see my mail.","Is your ftp server working correctly?","My mails get delayed too much when my php application sends them.","I cannot read my mail","I cannot connect to the ftp server.","I cannot upload to the ftp server","My rails application is not working in your server.","Can I use background processes in the shared hosting?","Can I install this gem?","My php app is not working","Can you setup a ssl cert for me please?","I cannot connect to my server.","How can I connect to subversion?"]

Page 37: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Vamos a trabajar (II)

• Entrenar el clasificador

# Train the classifiertechnician.each { |technician| classifier.train_Technical technician }commercial.each { |commercial| classifier.train_Commercial commercial }

Page 38: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Ya está listo!

• Listo para usar. ¿Magia?puts classifier.classify "How can I connect to my ftp account?“-> Technicalputs classifier.classify "Is a private account better?“-> Commercialputs classifier.classify "Do you have available rails framework?“-> Technicalputs classifier.classify "How much is your shared hosting for a whole year?"-> Commercialputs classifier.classify "I didn't get my discount in the last invoice. Is there something wrong?"-> Commercialputs classifier.classify "Connection Timeout in my ftp connections“-> Technicalputs classifier.classify "Which is my email outgoing server?“-> Technical

Page 39: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

Conclusiones…• No hay que tener miedo de los algoritmos de

Inteligencia Artificial (al menos por ahora)• Pensadlo, pueden mejorar increíblemente

vuestras aplicaciones web con muy poca dedicación.

• Es muy fácil de usar.• Las aplicaciones de la IA son más que la

detección de SPAM.

Page 40: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

¿Preguntas?

Page 41: Inteligencia Artificial y Ruby on Rails: Mejora la publicidad de tu web

¡Gracias!

Código y más información en bee.com.es