Penilaian Nama Domain

25

Perdagangan nama domain adalah bisnis besar. Salah satu alat paling berguna untuk perdagangan nama domain adalah alat penilaian otomatis, sehingga Anda dapat dengan mudah memperkirakan berapa nilai domain yang diberikan. Sayangnya, banyak layanan penilaian otomatis memerlukan keanggotaan / berlangganan untuk digunakan. Dalam tantangan ini, Anda akan menulis alat penilaian sederhana yang secara kasar dapat memperkirakan nilai domain .com.

Input output

Sebagai masukan, program Anda harus mengambil daftar nama domain, satu nama per baris. Setiap nama domain akan cocok dengan regex ^[a-z0-9][a-z0-9-]*[a-z0-9]$, artinya terdiri dari huruf kecil, digit, dan tanda hubung. Setiap domain setidaknya memiliki dua karakter dan tidak dimulai atau diakhiri dengan tanda hubung. The .comdihilangkan dari setiap domain, karena tersirat.

Sebagai bentuk input alternatif, Anda dapat memilih untuk menerima nama domain sebagai array bilangan bulat, alih-alih serangkaian karakter, selama Anda menentukan konversi karakter-ke-integer yang Anda inginkan.

Program Anda harus menampilkan daftar bilangan bulat, satu per baris, yang memberikan harga yang dinilai dari domain terkait.

Internet dan File Tambahan

Program Anda mungkin memiliki akses ke file tambahan, selama Anda memberikan file-file ini sebagai bagian dari jawaban Anda. Program Anda juga diizinkan untuk mengakses file kamus (daftar kata-kata yang valid, yang tidak harus Anda berikan).

(Sunting) Saya telah memutuskan untuk memperluas tantangan ini agar program Anda dapat mengakses internet. Ada beberapa batasan, karena program Anda tidak dapat mencari harga (atau riwayat harga) dari sembarang domain, dan hanya menggunakan layanan yang sudah ada sebelumnya (yang terakhir untuk menutupi beberapa celah).

Batas hanya pada ukuran total adalah batas ukuran jawaban yang dikenakan oleh SE.

Contoh input

Ini adalah beberapa domain yang baru dijual. Penafian: Meskipun tidak satu pun dari situs-situs ini tampak berbahaya, saya tidak tahu siapa yang mengendalikan mereka dan dengan demikian menyarankan untuk tidak mengunjungi mereka.

6d3
buyspydrones
arcader
counselar
ubme
7483688
buy-bikes
learningmusicproduction

Contoh Output

Angka-angka ini nyata.

635
31
2000
1
2001
5
160
1

Mencetak gol

Penilaian akan didasarkan pada "perbedaan logaritma." Misalnya, jika suatu domain dijual seharga $ 300 dan program Anda menilainya seharga $ 500, skor Anda untuk domain itu adalah abs (ln (500) -ln (300)) = 0,5108. Tidak ada domain yang memiliki harga kurang dari $ 1. Skor keseluruhan Anda adalah skor rata-rata untuk set domain, dengan skor lebih rendah lebih baik.

Untuk mendapatkan ide skor apa yang harus Anda harapkan, cukup tebak konstan 36untuk data pelatihan di bawah ini yang menghasilkan skor sekitar 1.6883. Algoritme yang sukses memiliki skor kurang dari ini.

Saya memilih untuk menggunakan logaritma karena nilai rentang beberapa urutan besarnya, dan data akan diisi dengan outlier. Penggunaan perbedaan absolut sebagai ganti perbedaan kuadrat akan membantu mengurangi efek pencilan dalam penilaian. (Juga, perhatikan bahwa saya menggunakan logaritma natural, bukan basis 2 atau basis 10.)

Sumber data

Saya telah membaca sekilas lebih dari 1.400 domain .com yang baru terjual dari Flippa , sebuah situs web lelang domain. Data ini akan menjadi kumpulan data pelatihan. Setelah periode pengiriman selesai, saya akan menunggu satu bulan tambahan untuk membuat set data uji, yang dengannya kiriman akan dinilai. Saya mungkin juga memilih untuk mengumpulkan data dari sumber lain untuk menambah ukuran set pelatihan / tes.

Data pelatihan tersedia di intisari berikut. (Penafian: Meskipun saya telah menggunakan beberapa pemfilteran sederhana untuk menghapus beberapa domain NSFW yang terang-terangan, beberapa mungkin masih terkandung dalam daftar ini. Juga, saya sarankan agar tidak mengunjungi domain yang tidak Anda kenal .) Angka-angka di sisi kanan adalah harga sebenarnya. https://gist.github.com/PhiNotPi/46ca47247fe85f82767c82c820d730b5

Berikut ini adalah grafik distribusi harga dari kumpulan data pelatihan. Sumbu x adalah log harga alami, dengan sumbu y dihitung. Setiap batang memiliki lebar 0,5. Paku di sebelah kiri sesuai dengan $ 1 dan $ 6 karena situs web sumber membutuhkan tawaran untuk menambah setidaknya $ 5. Data uji mungkin memiliki distribusi yang sedikit berbeda.

masukkan deskripsi gambar di sini

Berikut ini tautan ke grafik yang sama dengan lebar batang 0,2. Dalam grafik itu Anda bisa melihat paku di $ 11 dan $ 16.

PhiNotPi
sumber
Hanya maju, menggunakan digraf yang paling umum untuk mencetak domain bekerja sangat buruk! R² ≅ 0
2
Seseorang jelas perlu melakukan jawaban jaringan saraf untuk ini.
user48538
1
Apakah program dapat terhubung ke internet (katakanlah, permintaan google)? Secara eksplisit bukan untuk tujuan mencari harga, tetapi untuk mengumpulkan data untuk digunakan sebagai karakteristik.
Joe
@ Joey Maaf saya tidak punya kesempatan untuk menanggapi, tetapi saya telah memutuskan untuk mengizinkan akses internet.
PhiNotPi

Jawaban:

3

Perl, 1.38605

Saya pikir saya harus terus maju dan memposting karya saya sendiri, dengan harapan akan memacu kompetisi. Skornya 1.38605berarti bahwa biasanya dimatikan oleh faktor 3.999(itu adalah titik perhentian saya). Saya tidak menggunakan perpustakaan pembelajaran mesin, hanya langsung Perl. Itu memang membutuhkan akses ke kamus; Saya menggunakan yang dari sini .

Silakan menggunakan beberapa angka / statistik dari program saya sendiri.

use strict;

my %dict;
my $dictname = "dict.txt";
open(my $dfh, '<', $dictname);
while (my $row = <$dfh>) {
  chomp $row;
  $dict{lc $row} = 1;
}

my $domain = <>;
chomp($domain);

my $guess = 1;

if($domain =~ /^[a-z]*$/){
    my @bylength = (200000,20001,401,45,45,41,26,26,26,26,26,24);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 18;
  }
} elsif ($domain =~ /^[0-9]*$/){
  my @bylength = (300000,30001,6000,605,50);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 7;
  }
} elsif ($domain =~ /^[a-z0-9]*$/){
  my @bylength = (52300,523,28);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 23;
  }
} else {
  my @bylength = (50000,500,42,32,32,31);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 12;
  }
}

my $wordfact = 1;

my $leftword = 0;
for(my $i = 1; $i <= length($domain); $i++){
  my $word = substr $domain, 0, $i;
  if(exists($dict{$word})){
    $leftword = $i;
  }
}

$wordfact *= ($leftword/length($domain))**2 * 0.8 + ($leftword/length($domain)) * -0.1 + 0.9;

if($leftword/length($domain) >= 0.8){
  $wordfact *= 2.4;
}

my $rightword = 0;
for(my $i = 1; $i <= length($domain); $i++){
  my $word = substr $domain, length($domain)-$i, $i;
  if(exists($dict{$word})){
    $rightword = $i;
  }
}

$wordfact *= ($rightword/length($domain))**2 * 0.9 + ($rightword/length($domain)) * -0.2 + 1;         

$guess *= $wordfact;

my $charfact = 1;
my %charfacts = (
  i => 1.12, #500
  l => 0.84,
  s => 1.09,
  a => 0.94,
  r => 1.03,
  o => 0.97, 
  c => 1.22, #400
  d => 0.88,
  u => 1.07,
  t => 0.95,
  e => 1.08,
  m => 0.91, #300
  p => 1.08,
  y => 0.92,
  g => 0.97,
  ne => 0.56, #100
  n => 1.13,
  z => 0.67,
  re => 1.30,
  es => 0.75,
);
while(my ($key,$value) = each %charfacts){
  if($domain =~ /$key/){
    $charfact *= $value;
  }
}
$guess *= $charfact;

$guess = int($guess + 0.5);
if($guess <= 0){
  $guess = 1;
}

print $guess;

Berikut adalah grafik yang dibuat oleh program penilaian saya, menunjukkan sebaran sebaran penilaian atas harga aktual dan histogram kesalahan. Dalam plot sebar .:oO@berarti 10, 20, 30, 40, 50domain pada titik itu, masing-masing. Dalam histogram masing-masing Omewakili 16 domain.

Skala diatur pada 1 character width = e^(1/3).

masukkan deskripsi gambar di sini

Ada tiga langkah utama untuk program ini. Hasil dari setiap langkah dikalikan bersama.

  1. Kategorisasi berdasarkan kelas karakter dan panjangnya. Ini menentukan apakah domain adalah semua huruf, semua angka, huruf dan angka, atau jika berisi tanda hubung. Kemudian memberikan nilai numerik yang ditentukan oleh panjang domain. Saya menemukan bahwa ada penurunan nilai yang aneh di sekitar panjang 5. Saya menduga ini karena pengambilan sampel: domain yang lebih pendek berharga karena panjangnya (bahkan jika hurufnya tidak masuk akal), sedangkan domain yang paling panjang cenderung berupa kata / frasa. Saya memesan untuk mencegah overfitting, saya membatasi bahwa domain tidak dapat dihukum karena lebih pendek (jadi panjang 5 setidaknya sebaik panjang 6).

  2. Evaluasi konten kata. Saya menggunakan kamus untuk menentukan panjang kata kiri dan kanan dalam nama domain. Sebagai contoh myawesomesite -> my & site -> 2 & 4,. Kemudian, saya mencoba melakukan beberapa penyesuaian berdasarkan proporsi nama domain yang dibuat oleh kata-kata itu. Nilai-nilai rendah biasanya menunjukkan bahwa domain tidak mengandung kata, berisi kata yang di-pluralized / dimodifikasi yang tidak ada dalam kamus, berisi kata yang dikelilingi oleh karakter lain (kata-kata internal tidak terdeteksi, walaupun saya mencobanya tanpa perbaikan), atau mengandung frase beberapa kata. Nilai-nilai tinggi menunjukkan bahwa itu adalah satu kata atau kemungkinan frase dua kata.

  3. Evaluasi konten karakter. Saya mencari substring yang terkandung dalam banyak domain dan yang tampaknya mempengaruhi nilai-nilai domain. Saya percaya ini disebabkan oleh beberapa jenis kata yang lebih populer / lebih menarik, karena berbagai alasan. Misalnya, surat itu imuncul di sekitar setengah dari domain (741 di antaranya), dan menaikkan nilai domain rata-rata sekitar 12%. Itu tidak berlebihan; ada sesuatu yang nyata di sana, yang saya tidak sepenuhnya mengerti. Surat itu lmuncul di 514 domain dan memiliki faktor 0,84. Beberapa huruf / digraf yang kurang umum, seperti neyang muncul 125 kali dan memiliki faktor sangat rendah 0,56, mungkin terlalu pas.

Untuk memperbaiki program ini, saya mungkin perlu menggunakan beberapa jenis pembelajaran mesin. Juga, saya bisa mencari hubungan antara panjang, konten kata, dan konten karakter untuk menemukan cara yang lebih baik untuk menggabungkan hasil yang terpisah ke dalam nilai penilaian keseluruhan.

PhiNotPi
sumber