SORU
26 EKİM 2011, ÇARŞAMBA


Açılıyor gibi ürün özellikleri

Üç nitelikleri ile iki seçenek dahil discrete choice tasks bir dizi veri (marka, fiyat, performans) bir dizi var. Bu verilerden, her bir birey ve her bir çizim için yardımcı ve sonunda tercih payını hesaplamak için kullanacağım hangi posterior dağılımı çizer 1000 aldım.

Fiyat ve performans ayrık düzeyleri (-.2, 0, .2) Test ve (-.25, 0, .25) idi. Nitelik düzeyleri arasında test programı eklemek mümkün olmak istiyorum. Hadi doğrusal aradeğerleme istatistiksel olarak yapmak için uygun bir şey olduğunu şimdi varsayalım. Diğer bir deyişle, en verimli fiyat @ 10% ile senaryoyu test etmek istedim eğer fiyat için yardımcı aktarmaya şekilde daha düşük nedir? Çok düzgün ve verimli bir şekilde ilişkilendirme yapmak için düşünmek mümkün olmamıştır. Mapply bir tertip ettik() plyr gelen mdply fonksiyonu ile yaklaşım

İşte bazı veriler ve benim şimdiki yaklaşım:

library(plyr)
#draws from posterior, 2 respondents, 2 draws each
draw <- list(structure(c(-2.403, -2.295, 3.198, 1.378, 0.159, 1.531, 
1.567, -1.716, -4.244, 0.819, -1.121, -0.622, 1.519, 1.731, -1.779, 
2.84), .Dim = c(2L, 8L), .Dimnames = list(NULL, c("brand_1", 
"brand_2", "price_1", "price_2", "price_3", "perf_1", "perf_2", 
"perf_3"))), structure(c(-4.794, -2.147, -1.912, 0.241, 0.084, 
0.31, 0.093, -0.249, 0.054, -0.042, 0.248, -0.737, -1.775, 1.803, 
0.73, -0.505), .Dim = c(2L, 8L), .Dimnames = list(NULL, c("brand_1", 
"brand_2", "price_1", "price_2", "price_3", "perf_1", "perf_2", 
"perf_3")))) 

#define attributes for each brand: brand constant, price, performance
b1 <- c(1, .15, .25)
b2 <- c(2, .1, .2)

#Create data.frame out of attribute lists. Wil use mdply to go through each 
interpolateCombos <- data.frame(xout = c(b1,b2), 
                                atts = rep(c("Brand", "Price", "Performance"), 2),
                                i = rep(1:2, each = 3),
                                stringsAsFactors = FALSE)

#Find point along line. Tried approx(), but too slow

findInt <- function(x1,x2,y1,y2,reqx) {
  range <- x2 - x1
  diff <- reqx - x1
  out <- y1   ((y2 - y1)/range) * diff
  return(out)
}


calcInterpolate <- function(xout, atts, i){
  if (atts == "Brand") {
    breaks <- 1:2
    cols <- 1:2
  } else if (atts == "Price"){
    breaks <- c(-.2, 0, .2)
    cols <- 3:5
  } else {
    breaks <- c(-.25, 0, .25)
    cols <- 6:8
  }

  utils <- draw[[i]][, cols]

  if (atts == "Brand" | xout %in% breaks){ #Brand can't be interpolated or if level matches a break
    out <- data.frame(out = utils[, match(xout, breaks)])
    } else{ #Must interpolate    
    mi <- min(which(breaks <= xout))
    ma <- max(which(breaks >= xout))
    out <- data.frame(out = findInt(breaks[mi], breaks[ma], utils[, mi], utils[,ma], xout))
    }
  out$draw <- 1:nrow(utils)
  return(out)
}
out <- mdply(interpolateCombos, calcInterpolate)

Nitelik düzeyleri interpolasyon olmadan başarmak için çalışıyorum ne bağlam sağlamak için, burada yapmam. Markalar artık sütun başvuruları açısından tanımlanır unutmayın. p1 & p2 ürün tanımına bakın, u1 ve u2 var programı, s1, s2 olduğunu çizmek için tercih paylaşır.

Doğru yönde herhangi bir titreşim mutluluk duyacağız. Gerçek davam 8 öznitelikleri her 10 ürün var. At 10k çekiyor, ram benim 8 GB alınabilecek, ama kendim kazdım bu delikten dışarı çıkamıyorum.

p1 <- c(1,2,1)
p2 <- c(2,1,2)


FUN <- function(x, p1, p2) {
  bases <- c(0,2,5)

  u1 <- rowSums(x[, bases   p1])
  u2 <- rowSums(x[, bases   p2])
  sumExp <- exp(u1)   exp(u2)
  s1 <- exp(u1) / sumExp
  s2 <- exp(u2) / sumExp
  return(cbind(s1,s2))
}
lapply(draw, FUN, p1 = p1, p2 = p2)

[[1]]
                s1        s2
[1,] 0.00107646039 0.9989235
[2,] 0.00009391749 0.9999061

[[2]]
              s1        s2
[1,] 0.299432858 0.7005671
[2,] 0.004123175 0.9958768

CEVAP
8 ŞUBAT 2012, ÇARŞAMBA


Alışılmamış ne arzu almak için bir yol tüm ürünleri 10k çekiyor kullanarak küresel bir sıralama oluşturmaktır.

10 ürün arasında ikili yarışmalar kaynağı olarak her beraberlik kullanın, ve tüm bu yarışmalar sonuçları toplam çekiyor.

Bu "lider-board" 10 ürünleriniz için. bir son verecek Bu size göreli yarar genelinde tüm tüketiciler, ya da atayabilir mutlak değer esas sayı kazanır (ve isteğe bağlı olarak, "güç" alternatif her yarışma için her ürün.

Ne zaman test yeni ürün ile farklı bir nitelik profili bulmak onun seyrek(st) temsili olarak bir vektör toplamı (ağırlıklı) diğer örnek Ürünler ve çalıştırın Yarışması yine galibiyetle olasılıkları ağırlıklı katkısını ağırlıkları bileşen öznitelik vektörleri.

Avantajı bu taklit Yarışması verimli ve küresel sıralamasında ile birlikte temsil eden yeni ürün gibi seyrek vektör meblağlar mevcut veri sağlar fazla düşünme ve yorumlama sonuçları, hangisi kullanışlı olduğunu düşünürsek stratejileri yendi rakip ürün bağlıyor.

Bir seyrek (tanımlayıcı) temsil yeni ürün (y) çözmek Ax = y burada Bir matrisin mevcut ürünleri (satır olarak öznitelik vektörleri) ve y bir vektörün ağırlıkları katkılarıyla mevcut ürünleri. Y sıfır olmayan girdileri en aza indirmek istiyor. Hızlı Jordan yöntemi Donoho DL madde (güç bir yineleme gibi) l0-l1 aza indirilmesi hızla seyrek çarpımını bulmak için çözmek için bir göz atın.

Bu (veya seyrek temsilleri ağırlıklı ortalama) varken yeni bir ürün modeli mevcut tercihinize çizer tarafından kurulan dayalı performansı hakkında yararlı sebep olabilir.

Avantaj zayıflığına olarak gösterimidir sağlar senin için neden yararlı, artı, daha fazla ya da ürün var, daha beri, daha az ürün olduğu için seyrek gösterilebilir. Büyük matrisleri için ölçek ve hızlı bir algoritma ile çok yararlı sonuçlar elde edebilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
R

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Khoury

    Adam Khoury

    23 Ocak 2008
  • Curso Online Gratuito

    Curso Online

    4 Aralık 2011
  • Whizzpopping

    Whizzpopping

    10 Kasım 2005