การประเมินชื่อโดเมน


25

การซื้อขายชื่อโดเมนเป็นธุรกิจขนาดใหญ่ หนึ่งในเครื่องมือที่มีประโยชน์ที่สุดสำหรับการซื้อขายชื่อโดเมนคือเครื่องมือประเมินราคาอัตโนมัติเพื่อให้คุณสามารถประเมินว่าโดเมนที่กำหนดมีมูลค่าเท่าใด น่าเสียดายที่บริการประเมินราคาอัตโนมัติหลายแห่งต้องการสมาชิก / สมัครสมาชิกเพื่อใช้งาน ในความท้าทายนี้คุณจะเขียนเครื่องมือประเมินราคาที่สามารถประมาณค่าโดเมน. com

อินพุต / เอาต์พุต

ในฐานะอินพุตโปรแกรมของคุณควรใช้รายชื่อโดเมนหนึ่งชื่อต่อหนึ่งบรรทัด ชื่อโดเมนแต่ละชื่อจะตรงกับ regex ^[a-z0-9][a-z0-9-]*[a-z0-9]$ซึ่งหมายความว่ามันประกอบด้วยตัวอักษรตัวพิมพ์เล็กตัวเลขและยัติภังค์ แต่ละโดเมนมีความยาวอย่างน้อยสองตัวอักษรและไม่เริ่มต้นหรือลงท้ายด้วยเครื่องหมายขีดคั่น .comถูกตัดออกจากแต่ละโดเมนเพราะมันบอกเป็นนัย ๆ

ในรูปแบบของการป้อนข้อมูลทางเลือกคุณสามารถเลือกที่จะยอมรับชื่อโดเมนเป็นอาร์เรย์ของจำนวนเต็มแทนที่จะเป็นสตริงอักขระตราบใดที่คุณระบุการแปลงแบบตัวอักษรเป็นจำนวนเต็ม

โปรแกรมของคุณควรแสดงรายการจำนวนเต็มหนึ่งรายการต่อบรรทัดซึ่งให้ราคาประเมินของโดเมนที่เกี่ยวข้อง

อินเทอร์เน็ตและไฟล์เพิ่มเติม

โปรแกรมของคุณอาจเข้าถึงไฟล์เพิ่มเติมได้ตราบใดที่คุณให้ไฟล์เหล่านี้เป็นส่วนหนึ่งของคำตอบ โปรแกรมของคุณยังได้รับอนุญาตให้เข้าถึงไฟล์พจนานุกรม (รายการคำที่ถูกต้องซึ่งคุณไม่ต้องระบุ)

(แก้ไข) ฉันได้ตัดสินใจขยายความท้าทายนี้เพื่อให้โปรแกรมของคุณสามารถเข้าถึงอินเทอร์เน็ต มีข้อ จำกัด บางประการเนื่องจากโปรแกรมของคุณไม่สามารถค้นหาราคา (หรือประวัติราคา) ของโดเมนใด ๆ ได้และมีการใช้บริการที่มีอยู่ก่อนเท่านั้น

การ จำกัด ขนาดโดยรวมเท่านั้นคือการ จำกัด ขนาดคำตอบที่กำหนดโดย SE

ตัวอย่างอินพุต

เหล่านี้คือบางโดเมนที่ขายล่าสุด ข้อจำกัดความรับผิดชอบ: แม้ว่าไม่มีเว็บไซต์ใดที่ดูเหมือนว่าเป็นอันตราย แต่ฉันไม่ทราบว่าใครเป็นผู้ควบคุมและแนะนำให้เยี่ยมชมพวกเขา

6d3
buyspydrones
arcader
counselar
ubme
7483688
buy-bikes
learningmusicproduction

ตัวอย่างผลลัพธ์

ตัวเลขเหล่านี้เป็นของจริง

635
31
2000
1
2001
5
160
1

เกณฑ์การให้คะแนน

การให้คะแนนจะขึ้นอยู่กับ "ความแตกต่างของลอการิทึม" ตัวอย่างเช่นหากโดเมนที่ขายในราคา $ 300 และโปรแกรมของคุณประเมินที่ $ 500 คะแนนของคุณสำหรับโดเมนนั้นจะเป็น abs (ln (500) -ln (300)) = 0.5108 ไม่มีโดเมนใดที่จะมีราคาต่ำกว่า $ 1 คะแนนโดยรวมของคุณคือคะแนนเฉลี่ยสำหรับชุดโดเมนที่มีคะแนนต่ำกว่าดีกว่า

เพื่อให้ได้ความคิดว่าคะแนนคุณควรคาดหวังเพียงแค่การคาดเดาคงที่หนึ่งสำหรับข้อมูลการฝึกอบรมด้านล่างส่งผลให้คะแนนเกี่ยวกับ36 1.6883อัลกอริทึมที่ประสบความสำเร็จมีคะแนนน้อยกว่านี้

ฉันเลือกที่จะใช้ลอการิทึมเพราะค่าครอบคลุมหลายลำดับของขนาดและข้อมูลจะถูกเติมด้วยค่าผิดปกติ การใช้ความแตกต่างแบบสัมบูรณ์แทนความแตกต่างกำลังสองจะช่วยลดผลกระทบของค่าผิดปกติในการให้คะแนน (โปรดทราบว่าฉันใช้ลอการิทึมธรรมชาติไม่ใช่ฐาน 2 หรือฐาน 10)

แหล่งข้อมูล

ฉันอ่านรายชื่อโดเมน. com ที่ขายล่าสุดกว่า 1,400 รายการจากFlippaซึ่งเป็นเว็บไซต์ประมูลโดเมน ข้อมูลนี้จะประกอบเป็นชุดข้อมูลการฝึกอบรม หลังจากหมดเวลาส่งฉันจะรออีกหนึ่งเดือนเพื่อสร้างชุดข้อมูลทดสอบซึ่งจะมีการส่งคะแนน ฉันอาจเลือกที่จะรวบรวมข้อมูลจากแหล่งอื่นเพื่อเพิ่มขนาดของชุดฝึกอบรม / ทดสอบ

ข้อมูลการฝึกอบรมมีอยู่ในส่วนสำคัญต่อไปนี้ (ข้อจำกัดความรับผิดชอบ: แม้ว่าฉันจะใช้การกรองแบบง่าย ๆ เพื่อลบโดเมน NSFW โจ่งแจ้งบางส่วนอาจยังคงอยู่ในรายการนี้นอกจากนี้ฉันขอแนะนำไม่ให้เยี่ยมชมโดเมนใด ๆ ที่คุณไม่รู้จัก ) ตัวเลขทางด้านขวาคือ ราคาที่แท้จริง https://gist.github.com/PhiNotPi/46ca47247fe85f82767c82c820d730b5

นี่คือกราฟของการกระจายราคาของชุดข้อมูลการฝึกอบรม แกน x เป็นบันทึกราคาตามธรรมชาติโดยมีการนับแกน y แต่ละแถบมีความกว้าง 0.5 ขวากด้านซ้ายตรงกับ $ 1 และ $ 6 เนื่องจากเว็บไซต์ต้นทางต้องการการเสนอราคาเพื่อเพิ่มอย่างน้อย $ 5 ข้อมูลทดสอบอาจมีการแจกแจงที่แตกต่างกันเล็กน้อย

ป้อนคำอธิบายรูปภาพที่นี่

นี่คือลิงค์ไปยังกราฟเดียวกันที่มีความกว้างของแถบ 0.2 ในกราฟนั้นคุณสามารถเห็น spikes ที่ $ 11 และ $ 16


เพียงแค่หัวค่ำใช้ digraphs ที่พบมากที่สุดเพื่อให้คะแนนโดเมนทำงานอย่างสุดซึ้ง!

2
บางคนเห็นได้ชัดว่าต้องการที่จะทำคำตอบที่เครือข่ายประสาทเทียมสำหรับการนี้
user48538

1
โปรแกรมสามารถลิงก์ไปยังอินเทอร์เน็ต (พูดแบบสอบถาม google) ได้ไหม? อย่างชัดเจนไม่ได้มีวัตถุประสงค์เพื่อค้นหาราคาแน่นอน แต่สำหรับการรวบรวมข้อมูลเพื่อใช้เป็นลักษณะ
Joe

@ โจขอโทษฉันไม่ได้มีโอกาสตอบ แต่ฉันตัดสินใจอนุญาตให้ใช้อินเทอร์เน็ต
PhiNotPi

คำตอบ:


3

Perl, 1.38605

ฉันคิดว่าฉันควรจะไปข้างหน้าและโพสต์ของตัวเองด้วยความหวังว่ามันจะกระตุ้นการแข่งขัน คะแนนของ1.38605มันหมายความว่าโดยทั่วไปแล้วจะปิดโดยปัจจัย3.999(นั่นคือจุดหยุดของฉัน) ฉันไม่ได้ใช้ไลบรารีการเรียนรู้ของเครื่องใด ๆ เพียงแค่ตรง Perl มันต้องการการเข้าถึงพจนานุกรม ผมใช้อย่างใดอย่างหนึ่งจากที่นี่

โปรดใช้ตัวเลข / สถิติจากโปรแกรมของฉันด้วยตัวคุณเอง

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;

นี่คือกราฟที่ทำโดยโปรแกรมการให้คะแนนของฉันซึ่งแสดงพล็อตการกระจายของการประเมินราคาจริงและฮิสโตแกรมของข้อผิดพลาด ในพล็อตกระจาย.:oO@หมายถึง10, 20, 30, 40, 50โดเมนที่จุดนั้นตามลำดับ ในฮิสโตแกรมแต่ละอันOแสดงถึง 16 โดเมน

1 character width = e^(1/3)ขนาดเป็นที่ตั้ง

ป้อนคำอธิบายรูปภาพที่นี่

โปรแกรมนี้มีสามขั้นตอนหลัก ผลลัพธ์จากแต่ละขั้นตอนจะถูกคูณเข้าด้วยกัน

  1. การแบ่งประเภทตามคลาสอักขระและความยาว มันจะกำหนดว่าโดเมนเป็นตัวอักษรทั้งหมดตัวเลขทั้งหมดตัวอักษรและตัวเลขหรือถ้ามันมียัติภังค์ จากนั้นจะให้ค่าตัวเลขที่กำหนดโดยความยาวของโดเมน ฉันพบว่ามีการจุ่มลงของค่าแปลก ๆ ประมาณความยาว 5 ฉันสงสัยว่านี่เป็นเพราะการสุ่มตัวอย่าง: โดเมนที่สั้นกว่านั้นมีค่าเนื่องจากความยาว (แม้ว่าตัวอักษรจะไร้สาระ) ในขณะที่โดเมนที่ยาวที่สุดมักจะเป็นคำ / วลี ฉันสั่งป้องกันไม่ให้เกิดการ overfitting ฉันวางข้อ จำกัด ในโดเมนที่ไม่สามารถลงโทษได้เนื่องจากการมีขนาดสั้นลง (ดังนั้นความยาว 5 จึงเป็นอย่างน้อยเท่ากับความยาว 6)

  2. การประเมินเนื้อหาคำ ฉันใช้พจนานุกรมเพื่อกำหนดความยาวของคำซ้ายและขวาในชื่อโดเมน ตัวอย่างเช่นmyawesomesite -> my & site -> 2 & 4. จากนั้นฉันพยายามที่จะปรับให้เหมาะสมตามสัดส่วนของชื่อโดเมนที่ประกอบขึ้นด้วยคำเหล่านั้น ค่าต่ำโดยทั่วไปจะระบุว่าโดเมนไม่มีคำประกอบด้วยคำที่มีหลายแบบหรือแก้ไขที่ไม่ได้อยู่ในพจนานุกรมมีคำที่ล้อมรอบด้วยอักขระอื่น ๆ (ตรวจไม่พบคำภายในแม้ว่าฉันพยายามที่ไม่มีการปรับปรุง) หรือมี วลีหลายคำ ค่าสูงระบุว่ามันเป็นคำเดียวหรืออาจเป็นสองคำวลี

  3. การประเมินเนื้อหาตัวละคร ฉันค้นหาสตริงย่อยที่มีอยู่ในโดเมนจำนวนมากและดูเหมือนว่าจะมีผลกับค่าของโดเมน ฉันเชื่อว่าสิ่งนี้เกิดจากคำบางคำที่ได้รับความนิยม / น่าดึงดูดยิ่งขึ้นด้วยเหตุผลหลายประการ ตัวอย่างเช่นตัวอักษรiปรากฏในประมาณครึ่งหนึ่งของโดเมน (741 ของพวกเขา) และกระแทกค่าโดเมนโดยเฉลี่ยประมาณ 12% นั่นไม่ใช่การทำให้อ้วนมากเกินไป มีบางสิ่งที่จริงที่ฉันไม่เข้าใจ ตัวอักษรlปรากฏใน 514 โดเมนและมีค่า 0.84 ตัวอักษร / กราฟิคที่พบน้อยกว่าบางตัวเช่นneที่ปรากฏ 125 ครั้งและมีตัวประกอบที่ต่ำมากที่ 0.56 อาจเป็น overfitting

เพื่อปรับปรุงโปรแกรมนี้ฉันอาจต้องใช้การเรียนรู้ของเครื่องบางชนิด นอกจากนี้ฉันสามารถค้นหาความสัมพันธ์ระหว่างความยาวเนื้อหาคำและเนื้อหาอักขระเพื่อค้นหาวิธีที่ดีกว่าในการรวมผลลัพธ์ที่แยกต่างหากเหล่านั้นเข้ากับราคาประเมินโดยรวม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.