Saturday, January 14, 2012

Modelo de Prediccion utilizando HANA y R

Estos ultimos dias, he estado leyendo y jugando bastante con R, y realmente he llegado a adorarlo...desde luego, no tengo ni idea en esas raras funciones estadisticas, pero eso no significa que no pueda usar R e intentar hacer algunas cuantas cosas asombrosas.

Asi que, ayer estaba pensando acerca de hacer integracion entre HANA y R, mis nuevos hijos adoptivos, asi que tuve la idea de hacer un modelo de prediccion para una companhia aerea. Segui estos pasos.

1.- Primero, tenia que escoger una tabla, asi que tome SNVOICE:

Esta tabla nos ofrece, el Carrier Id, la fecha y el Book Id, lo cual significa el numero de boletos vendidos en un dia en particular. Y de aqui podia hacer unos cuantos calculos y determinar cuantos boletos se vendieron en cada mes en un anho en particular.

2.- Necesitaba una tabla para guardar mi nueva informacion, asi que cree la tabla TICKETS_BY_YEAR:


3.- Necesitaba un Procedure para analisar la tabla, determinar el total por dia del mes y luego calcular el gran total por mes.



CREATE PROCEDURE GetTicketsByMonth
(IN var_year NVARCHAR(4),IN var_carrid NVARCHAR(2))
LANGUAGE SQLSCRIPT AS
v_found NVARCHAR(2) := 1;
sum_bookid INT;
v_date NVARCHAR(8) := '';
BEGIN
TT_MONTH = select fldate, count(bookid) as "BOOKID"
from sflight.snvoice
where year(fldate) = VAR_YEAR and carrid = VAR_CARRID
group by fldate
order by fldate asc;
v_date := (:var_year * 10000) + 101;
while :v_found <= 12 do
select sum(bookid) into sum_bookid
from :TT_MONTH
where month(fldate) = :v_found;
insert into TICKETS_BY_YEAR
values(v_date,sum_bookid);
v_date := :v_date + 100;
v_found := :v_found + 1;
end while;
END;

4.- Por supuesto...necesitaba llamar a mi Procedure...



CALL P075400.GetTicketsByMonth('2011','''AA''');

5.- Una vez terminado, revise mi tabla para estar seguro de que todo funciono como lo esperado...

6.- Luego de asegurarme de que mi informacion estaba correcta y limpia, la exporte a un archivo .CSV (Disculpen...pero no hay imagen esta vez...ya la postee antes)

7.- Fui a mi R Studio y empece a programar...



Flight_Tickets=read.csv(file="Flight_Tickets.csv",header=TRUE)
period=Flight_Tickets$PERIOD
tickets=Flight_Tickets$TICKETS
var_year=substr(period[1],1,4)
var_year=as.integer(var_year)
var_year=var_year+1
var_year=as.character(var_year)
new_period=gsub("^\\d{4}",var_year,period)
next_year=data.frame(year=new_period,StringsAsFactors=FALSE)
prt.lm=lm(tickets ~ period)
pred=predict(prt.lm,next_year,interval="none")

plot(tickets,type="b",
col="red",
main="Annual Tickets Sale",
xlab="Months",ylab="Tickets")
lines(pred,type="b",col="blue")
legend("bottomleft",inset=.05,title="Real vs. Predicted",
c("Real","Predicted"),
lty=c(1,1),col=c("red","blue"))

8.- Observe my grafico generado mostrando la venta real de tickets versus la venta predecida de tickets. La real es por cada mes de 2011 y la predecida es para cada mes del 2012.

9.- Nada que hacer aqui...ya esta hecho -:)

10.- Nos vemos la proxima vez, con HANA, R o alguna otra tecnologia.


Saludos,

Blag.

No comments: